곽로그
[level2] 124나라의 숫자 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/12899
check
-
쉬운문제를 쉽게 풀지못한다
-
이 문제를 처음에는 자리수를 구하고, N이 그 자리수에서 몇번째 수인지를 구한 다음, 모든 경우의 수를 구해서 해당 번째를 구하려고 했다.
-
왜 이렇게 복잡하게 생각했냐하면, 진법을 생각하지 못했기 때문
-
-
진법!
-
10진수를 2진수로, 3진수로 변환할 때를 생각해보면, 위 문제는 3진법 012 대신 412가 온거다
-
-
0과 0이 아닌 수
-
진법에서 0의 의미는 자리수가 하나 증가하는 것을 의미한다.
-
위 문제에서는 0 대신 4가 왔기때문에 윗자리수의 증가가 1번 늦게 시작한다. 즉 012의 3진법의 경우 1 -> 2 -> 10 -> 11 -> 12 -> 20 이렇게 가는데, 124의 경우에는 1 -> 2 -> 4 -> 11 -> 12 -> 14 -> 21 이렇게 하나씩 늦게 시작된다.
-
-
출력
-
처음에는 ArrayList를 선언해서 나머지를 거꾸로 입력한다음 거꾸로 출력하려고 했다. 근데 그럴필요없이 문제에서 정답을 String으로 출력하라고 했으니 String을 이용하면 된다. answer += remain 으로 하고서 다시 거꾸로 출력할 필요 없이 answer = remain + answer라고 하면 된다. 또 어렵게 생각했다.
-
-
시간초과
-
처음에 numbers를 int로 선언해서 시간초과가 났다.
-
comment
왤케 어렵게 생각하는 걸까.
풀이
10진법을 3진법으로 변환하는 문제와 같다. 다만 0이 4로 바뀌었기때문에 몫이 3으로 나누어 떨어지는 경우 몫에 -1 을 해줘야 한다.
코드
class Solution {
public String solution(int n) {
String[] numbers = {"4", "1", "2"};
String answer = "";
while(n > 0){
int remain = n % 3;
n /= 3;
if(remain == 0) n--;
answer = numbers[remain] + answer;
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 level2] 주식가격 (0) | 2020.11.26 |
---|---|
[프로그래머스 level2] 스킬트리 (0) | 2020.11.22 |
[프로그래머스 level2] H-Index (0) | 2020.08.25 |
[프로그래머스 level2] 카펫 (0) | 2020.08.19 |
[프로그래머스 level1] 모의고사 (0) | 2020.08.19 |