-
프로그래머스 - 124 나라의 숫자 (JavaScript)etc/coding test 2020. 4. 27. 20:33
문제 : https://programmers.co.kr/learn/courses/30/lessons/12899
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결 과정
처음 생각한 모양은 이랬다..
그래서 너비우선탐색으로 푸는 건가? 했는데,,
코드를 어떻게 짜야 할 지 감이 안 왔다;;
깊이우선탐색은 많이 풀어봐서 재귀로 만들겠는데..
너비우선탐색은 어떻게... 하는거지..?
그래서 일단 규칙을 생각해보려고 노력했다.
depth가 1일 때는 3까지 표현할 수 있고,
depth가 2일 때는 3 + 9 해서 12까지 표현할 수 있고,
depth가 3일 때는 3 + 9 + 27 해서 39가지 표현할 수 있고..
음.,, 뭔가 이건,,, 공비가 3인 등비수열의 합...!?을,, 이용,, 어쩌구,,
생각은 했는데 그래서 뭘 어떻게..? 풀건데? 싶어서 이 접근도 틀린 것 같았다.
뭔가 depth만큼 answer의 길이가 나오니까 어떻게 연결을 해보면 되지 않을까 싶어서
n을 가지고 depth를 먼저 구해서 answer의 길이를 구한 다음에,,
근데 각 자리에 어떤 숫자가 들어가는지 알 수가 없잖아????
싶어서 결국 고민하다가 이번에는 구글링을 했다..
(알고리즘 풀 때는 구글링하면 뭔가 지는 느낌이라 하기 싫은데.. 휴,,
아무튼 구글링을 하니 규칙이 다음과 같았다.
1. 주어진 숫자 n을 3으로 나눈다. 그럼 나머지가 0,1,2가 나온다.
2. n을 3으로 나눴을 때 처음 나오는 나머지가 변환했을 때 제일 끝의 자리가 되는 것을 알 수 있다.
Ex. 1,4,7은 3으로 나누면 나머지가 1인데 모두 끝자리가 1이다. 나머지가 2면 2, 나머지가 0이면 4다.
3. 주어진 3으로 나눈 몫을 다시 나눠서 나온 나머지로 그 다음 끝자리를 구할 수 있다.
이런식으로 주어진 n이 0보다 작아질 때까지 반복하면 124 나라의 숫자로 변환할 수 있다.
다만 나머지가 0이 되는 경우는 나눈 후 1을 빼줘야 하는데 이유는 반복문을 빠져나와야 해서 그렇다.
Ex. 3일 때 나머지가 0이고 몫이 1이라서 반복문을 한 번 더 돌게 된다. 이걸 방지하기 위해 1을 빼줌코드
function solution(n) { var answer = ""; const country124 = "412"; let count = n; while (count > 0) { if (count % 3 === 0) { answer = country124[0] + answer; count = count / 3 - 1; } else if (count % 3 === 1) { answer = country124[1] + answer; count = Math.floor(count / 3); } else if (count % 3 === 2) { answer = country124[2] + answer; count = Math.floor(count / 3); } } return answer; }
생각해보고 싶은 점
규칙을 더 잘 찾으려면 어떤 걸 알아야 할까?
출처:
프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'etc > coding test' 카테고리의 다른 글
프로그래머스 - 문자열 압축 (JavaScript) (0) 2020.05.04 프로그래머스 - 튜플 (JavaScript) (0) 2020.04.28 프로그래머스 - 탑 (JavaScript) (0) 2020.04.26 프로그래머스 - 타겟 넘버 (JavaScript) (0) 2020.04.23 프로그래머스 - 프린터 (JavaScript) (0) 2020.04.20