코딩테스트 연습 - 124 나라의 숫자
programmers.co.kr
우선 아래는 내가 푼 해답
function solution(n) {
const NumList = []
while (true) {
if (n > 3) {
const temp = n % 3;
if (Math.floor(temp) === 0) {
NumList.unshift(4);
n = n / 3 - 1;
} else {
NumList.unshift(Math.floor(temp));
n = n / 3;
}
} else {
if (Math.floor(n) == 3) {
NumList.unshift(4)
break;
} else if (Math.floor(n) == 0) {
break;
} else {
NumList.unshift(Math.floor(n))
break;
}
}
}
return NumList.join("");
}
1,2,4 단위로 숫자가 올라가고 3개 단위로 뒷자리가 초기화되고 앞단위가 바뀌거나 추가된다.
처음에는 문제를 잘못 이해해서 아래와 같이 멍청하게 풀고있었다.. (쉬운 문제인줄 알았지..)
const fool = {
1:1,
2:2
3:4,
4:11,
5:12,
6:14,
7:21
8:22,
9:24,
10:41
}
잘못 풀고있다는걸 깨닫고 분명히 푸는 로직이 있을거라 생각해서 삼성노트를 켜서 로직을 계산해봤다.
그러다보니, 10진법 숫자를 3으로 나눈 나머지값이 [0,1,2]가 반복해서 나왔고, 나머지가 0일경우(또는 3의배수일경우) 맨 뒷자리가 4가 된다는것을 알았다.(1일경우 는 1, 2일경우 2)
가 나오는데, 소숫점부분은 Math.floor로 내려준다)
또한 n을 3으로 나누고 1을뺀 후 다시 값을 나눠서 나머지를 구하는것을 반복하면 앞자리수들도 답이 나온다.
function change124(n) {
return n === 0 ? '' : change124(parseInt((n - 1) / 3)) + [1, 2, 4][(n - 1) % 3];
}
위 코드는 내가 푼건 아니고 풀고나서 다른사람의 풀이 보니까 완전 간결하고 멋있는 코드라서 같이 올려본다..
나는 두시간 가량 고민해서 28줄짜리 코드를 적었는데 이게 3줄만에 해결이 가능하다니..
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 프린터 (0) | 2021.04.08 |
---|---|
Github Action사용법 + Push하면 바로 deploy 되게 하기 (0) | 2021.04.06 |
프로그래머스 KAKAO 2019 문제 - 오픈채팅방 (0) | 2021.04.03 |
프로그래머스 KAKAO 2021 문제 - 신규 아이디 추천 (0) | 2021.04.03 |
프로그래머스 KAKAO 2019 문제 - 크레인 인형 뽑기 (0) | 2021.04.02 |