https://programmers.co.kr/learn/courses/30/lessons/12899
문제를 읽어보면 3진법을 푸는 문제이다.
하지만 3진법과 다른 점이 있다면 값을 나누었을 때 나머지가 0이라면 몫에서 1을 빼고, 나머지 0을 4로 표현해야한다는 차이점이 있다.
이러한 규칙을 통해 문제를 풀어보았다.
class Solution {
public String solution(int n) {
StringBuilder answer = new StringBuilder();
int share = n;
int remain;
while (share != 0) {
remain = share % 3;
share = share / 3;
if(remain == 0){
remain = 4;
share -= 1;
}
answer.append(remain);
}
return answer.reverse().toString();
}
}
문제를 풀며 StringBuffer를 다시 익히게 되었다.
String의 경우는 불변 속성을 가지고 있기에 "hello"+"world"의 연산을 하는 경우 2개의 메모리는 그대로 유지하고 "hello world"라는 새로운 메모리 영역을 가르키게 된다. 이러한 이유때문에 String을 사용하면 시간 및 메모리 낭비가 심하게 발생한다.
반면에 StringBuilder는 동일 객체 내에서도 문자열 변경이 가능하고 파이썬처럼 append(), delete(), reverse()등의 api가 존재하여 문제를 풀때 사용하면 편한 장점이 존재한다.
앞으로 String대신 StringBuilder를 자주 사용하도록 노력하자!