문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법 | 124나라 | 10진법 | 124나라 |
1 | 1 | 6 | 14 |
2 | 2 | 7 | 21 |
3 | 4 | 8 | 22 |
4 | 11 | 9 | 24 |
5 | 12 | 10 | 41 |
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- n은 500,000,000이하의 자연수 입니다.
입출력 예
n | result |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
초기화면
function solution (n) {
var answer = '';
return answer;
}
글쓴이 풀이
function solution (n) {
var answer = '';
// 124 나라 숫자 배열
let nation124 = [4,1,2];
// 10진법을 3진법으로 변경해야하니 3으로 나눈 값을 넣어줄 변수
let value = 0;
while(n > 0) {
// n을 3으로 나눴을때 나머지를 담음
value = n%3;
// 소수점을 내림해줄 내장함수
n = parseInt(n/3);
//만약에 value가 0이라면 n--로 반복문 중단
value === 0 ? n-- : false
// answer문자열에 nation124배열의value인덱스 위치의 값 + answer을더합니다
answer = nation124[value] + answer;
}
return answer;
}
다른 유저의 풀이
function change124(n) {
return n === 0 ? '' : change124(parseInt((n - 1) / 3)) + [1, 2, 4][(n - 1) % 3];
}
문제 풀이
nation124라는 124나라의 숫자를 담을 배열을 만든 다음 나눈 값을 저장할 변수 value도 만듭니다 그리고 반복문을 만들어 n이 0이 될 때까지 반복하도록 합니다 value에 n%3 을해서 n을 3으로 나눈 나머지 값을 넣어줍니다 그리고 n에는 내장 함수 ParseInt를 이용해 n을 3으로 나눈 몫을 넣어줍니다 그리고 코드를 간결하게 쓰고 싶어서 삼항 연산자를 써서 value가 0이라면 --n로 반복문을 중단해줍니다 그리고 마지막으로 answer 문자열에 nation124 숫자 배열의 value인덱스 위치의 값을 찾아 이전에 있던 answer과 함 쳐서 넣어줍니다
느낀 점
몇 시간째 혼자서 풀어보려고 삽질하다가 결국에는 힌트를 찾아봤습니다
'공부 > 알고리즘' 카테고리의 다른 글
[ JS 코딩테스트 ][ 체험 문제] 네이버웹툰 개발 챌린지 1차 코딩 테스트 (0) | 2021.06.29 |
---|---|
[ JS 코딩테스트 ] 서울에서 김서방 찾기 (0) | 2021.06.28 |
[ JS 코딩테스트 ] 내적 (0) | 2021.06.24 |
[ JS 코딩테스트 ] 모의고사 (0) | 2021.06.23 |
[ JS 코딩테스트 ] 로또의 최고 순위와 최저 순위 (0) | 2021.06.22 |