public String solution(int n){ //길이가 1이면 바로 "수"를 리턴 if(n <= 1) return n == 1 ? "수" : ""; //변수설정 뺀횟수, 곱할 수, 곱한 횟수 int plus = 0; int multi = 1; int multiCnt = 0; StringBuffer sb = new StringBuffer("수박"); //n이 2가 될때까지 반복한다. while (true) { //n이 홀수면 1을 빼고 뺀 수에 1을 더한다. if (n % 2 == 1) { n--; plus += multi; //n이 짝수면서 2가 아니면 2로 나누고 곱할 수에 2를 곱하고 곱한 횟수에 1을 더한다 } elseif (n % 2 == 0 && n != 2) { n /= 2; multi \*= 2; multiCnt++; //n이 2이면 "수박"을 만들고 곱한 횟수만큽 자기자신을 더한다. } elseif (n == 2) { for (int i = 0; i < multiCnt; i++) { sb.append(sb); } break; } } //뺀 숫자는 위의 과정을 반복한다. return sb.toString() + solution(plus); }
결과
그냥 StringBuffer로 반복돌면서 더하는게 훨씬 빠르다!
[짧고 강하다] []
1 2 3 4 5 6 7 8 9 10
public String solution(int n){
StringBuffer sb = new StringBuffer(); String[] arr = {"수","박"}; for(int i = 0; i < n; i++){ sb.append(arr[i%2]); } return sb.toString();