반응형
문제
풀이과정
숫자가 1, 2, 4 순서로 반복되며 값이 반복되는 형식이다.
값을 3으로 나눴을때 몫과 나머지를 구해서 answer에 나머지를 추가해주는 형식으로 답을 구했다.
다만 3으로 나눳을때 값이 1, 2, 0 순으로 된다
나머지 0일 경우 몫이 1개가 생기므로 새로운 값이 추가되는 현상이 발생하여 주어진 값을 -1 하여
나눳을때 값이 0,1,2 순으로 되게 만들어서 답을 구하였다.
기본 풀이코드
function solution(n) {
let answer = '';
function oneTwoFour(n){
n = n - 1
let num = parseInt(n / 3); // 몫
let sub = n % 3; // 나머지
if(sub == 0){
answer = '1' + answer;
}else if(sub == 1){
answer = '2' + answer;
}else if(sub == 2){
answer = '4' + answer;
}
if(num > 0){
oneTwoFour(num);
}
}
oneTwoFour(n);
return answer;
}
리펙토링
if else 문이 너무 많아 지저분해 보였다. 해당 코드를 리펙토링하여 수정하기 위해 배열을 사용했다.
리펙토링 코드
function solution(n) {
let answer = '';
function oneTwoFour(n){
n = n - 1
let num = parseInt(n / 3); // 몫
let sub = n % 3; // 나머지
answer = ['1','2','4'][sub] + answer;
if(num > 0){
oneTwoFour(num);
}
}
oneTwoFour(n);
return answer;
}
후기
n = n - 1 을 생각하여
처음부터 리펙토링하여 배열로 간단하게 값을 가지고 오는 방법을 빠르게 생각했어야되는데 바로 떠오르지 않았다.
앞으로 잘풀어보자!
반응형
'알고리즘' 카테고리의 다른 글
오픈채팅방 (42888 / 프로그래머스 / JavaScript) (0) | 2021.12.21 |
---|---|
모음사전 ( 84512 /프로그래머스 / JavaScript) (0) | 2021.12.12 |
거리두기 확인하기 (81302 / 프로그래머스 / JavaScript) (0) | 2021.12.02 |