programmers.co.kr/learn/courses/30/lessons/12899
코딩테스트 연습 - 124 나라의 숫자
programmers.co.kr
알고나면 어렵지 않아보이지만 막상 접근하기 쉽지 않았던 문제였다.
일단, 접근 방법이 떠오르지 않아서 다른 사람의 풀이를 참조했다.
n이 5억이다.
적어도 O(N)으로는 풀 수 없는 문제라는 얘기이다.
따라서, 규칙을 찾아서 풀어야하는데
일단 3으로 나눠본다.
나눴더니 어느정도 규칙이 보인다.
나머지가 0일 때 4, 1일 때 1, 2일 때 2이다.
여기까지는 생각했는데 두 자리 숫자가 되면 어떻게 되지에서 막혀버렸다.
풀이는 간단하다.
우리가 흔히 알고 있는 10진수를 2진수로 바꾸는 방법처럼 풀면 된다.
몫이 0이 될 때까지 나눈 후에 나머지를 거꾸로 나열한다.
대신, 0일 때는 값이 4이고 n을 1만큼 빼줘야한다.
거꾸로 나열할 때 answer를 뒤에 다 +연산해주는 방법은 기발한 것 같다.
public String solution(int n) {
String[] numbers = { "4", "1", "2" };
String answer = "";
int num = n;
while(true) {
if(num == 0) {
break;
}
int remain = num%3;
num /= 3;
if(remain == 0) num--;
answer = numbers[remain] + answer;
}
return answer;
}
[프로그래머스] 124 나라의 숫자 (Java)
프로그래머스 124 나라의 숫자(https://programmers.co.kr/learn/courses/30/lessons/12899최악의 경우 n이 5억이다. 따라서 하나씩 숫자를 올려가며 하는 것은 불가하다. 숫자가 1, 2, 4 세 가지만 존재하니까 n을
velog.io
'Algorithm > Mathematics' 카테고리의 다른 글
[프로그래머스] 멀쩡한 사각형 (0) | 2021.04.02 |
---|