본문 바로가기
Today I Learned 2024. 5. 10.

(24.05.10)[5주차] n진수로 바꾸기 & StringBuffer

오늘은 팀 프로젝트 발표가 있었고 동시에 KPT 회고가 있었기 때문에 관련 부분에 더 집중해선 공부하고 살펴보았다.

그래도 CODE KATA에서 배운 것들을 실습하는 연습을 놓치곤 있지는 않기 떄문에

이번에도 StringBuffer을 상용하는 실습겸 알고리즘에 사용하는 연습을 했다.


CODE KATA 정리

 

n진수로 바꾸기 & StringBuffer

더보기


public class Main {
    public static void main(String[] args) {
                int n =125;
        /*3진수로 변환*/
        StringBuffer answerBuffer = new StringBuffer();
        String base3="";
        while(n>0){
            int remainder = n%3;
            answerBuffer.insert(0, remainder);
            n=(int)n/3;
        }

        int answer = Integer.parseInt(answerBuffer.toString());
        System.out.println(answer);
    }
}
  • 2진수, 8진수, 16진수로 int 값을 변환하는 메서드는 Integer클래스에 이미 정의되어 있음
    • 2진수(binary): Integer.toBinaryString(int number)
      8진수(octal): Integer.toOctalString(int number)
      16진수(hexadecimal): Integer.toHexString(int number)

 

  • 그밖의 n진수들을 만드는 로직
    • n진수로 바꿀 int 정수를 계속 n으로 나누면서 첫번째 숫자부터 나머지를 그 값으로 지정, 몫을 계속 n으로 나누면서 나머지를 1의자리부터 채워나가는 반복문을 활용하는 알고리즘 활용
    • while 반복문을 통해 나눠지는 수가 결국 0이 될때까지 반복
    • 나머지 remainder는 계속 안에서 지정해서 반복문 벗어날 때 지역변수로 없어지게 만들어서 깔끔하게 유지

StingBuffer 활용

  • String은 join, concat 또는 += 을 통해서 뒤에서 계속 붙이거나 한번에 붙이면 다시는 수정할 수 없는 정적 변수인데 반해, StringBuffer는 String 문자열에서 Charater 하나씩 요소 간주하여, 자유롭게 수정이 가능
  • 주요 생성자 및 메서드
    • new StringBuffer() : () 안에 int 수를 넣으면 그 Capacity(크기)의 StringBuffer을 생성, String을 넣으면 해당 String 값을 StringBuffer 로 지정
    • .append(값) : () 안의 값을 문자/문자열 바꿔서 뒤에다가 추가
    • .insert(인덱스 번호, 값) : 배열처럼 해당 index에 값을 추가하는 것
      • 위의 코드에서 따라서 insert(0, remainder)을 했기 때문에 맨 앞에 추가를 계속해서 완성 가능
    • .toString() : StringBuffer을 String으로 변환
      • 반대는 위처럼 생성자를 사용해서 새로운 StringBuffer을 생성

코멘트

  • StringBuffer / StringBuilder는 간단한게 학습하고, 그냥 String으로 사용하는게 편하지 않을까 하고 넘었지만, 만약, 위와 같은 알고리즘일 때, StringBuffer을 사용하지 않느다면, String을 char 배열로 바꾸고 List로 변환한뒤 add를 통해c추가를 하고 Collecions.reverse()로 다시 뒤집어 줘야하는 불편함이 있을 것.
  • 여러 데이터를 합쳐서 String 타입으로 알고리즘의 결과가 반환되어야할 때, 굳이 Collections 를 쓰지 않아도 빠르고 간단하게 바꿀 수 있기 때문에 자주 사용할 수 있도록

 

 


다음주 부터는 좀더 어려워질 것 같은데, 아직 Java 감을 잡지 못해서 큰일이다.