[프로그래머스] 3진법 뒤집기 (Javascript)

2025. 2. 6. 10:19·Algorithm/프로그래머스 LV1

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

요구사항
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한조건
- n은 1 이상 100,000,000 이하인 자연수입니다.

입출력
n result
45 7
125 229

 

내가 생각한 로직

1. 빈 배열을 만든다.

2. 나머지를 저장할 변수를 만든다.

3. 10진법을 3진법으로 변환하기 위해서는 n을 3으로 나눌 때의 나머지를 알아야 되기 때문에, 나머지를 계산할 때마다 빈 배열에 값을 넣어둔다.

4. for문을 이용해서 역순으로 구한 3진법 배열을 다시 10진법으로 바꾼다.

5. 거듭제곱을 구해주는 Math.pow를 이용한다.

 

 

내가 구현한 코드

function solution(n) {
    const arr = [];
    let rest = 0;
    
    for (let i = 0; 0 < n; i++) {
        rest = n % 3;
        n = Math.floor(n / 3);
        arr.push(rest);
    }
    
    let answer = 0;
    for (let i = 0; i < arr.length; i++) {
        answer += arr[i] * Math.pow(3, arr.length-1-i)
    }
    return answer;
}

1시간을 다 써서 코드를 구현했다.

10진법을 3진법으로 바꾸는 for문에서 조건식을 설정하는 부분에서 오래 걸렸다.

역순 3진법을 10진법으로 바꾸는 for문에서는 3에 거듭제곱하는 숫자의 식을 생각하는데 오래 걸렸다.

 

 

다른 해결방법

사용한 도구: toString(), reverse(), join()

const solution = (n) => {
    return parseInt([...n.toString(3)].reverse().join(""), 3);
}

이 문제가 한 줄로 가능했다는게 신기했다.

toString(3)을 이용하면 10진법의 수를 3진법 형태의 문자열로 변환해준다고 한다.

3진법 문자열을 spread operator을 이용해서 배열로 만들어 준 뒤, reverse를 통해 뒤집어 준다.

뒤집힌 배열을 join을 통해 하나의 문자열로 합쳐준다.

parseInt(문자열, 3)은 문자열을 3진법으로 인식하여 다시 10진법으로 바꿔준다.

 

 

사용한 도구: while문, unshift(), reduce(), Math.pow()

function solution(n) {
    const answer = [];
    while(n !== 0) {
        answer.unshift(n % 3);
        n = Math.floor(n/3);
    }
    return answer.reduce((acc,v,i) => acc + (v * Math.pow(3, i)),0);   
}

while문을 이용해서 n이 0이 아닐 때까지 n을 3으로 나눈 나머지를 구한 코드를 구현했다.

reduce를 이용해서 3진법을 10진법으로 바꾸는 코드를 구현했다.

똑같은 원리로 코드가 작동하더라도 상황에 맞는 메서드를 잘 알고 있으면 코드가 간결해진다는 것을 느끼게 됐다.

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > 프로그래머스 LV1' 카테고리의 다른 글

[프로그래머스] 최소직사각형 (Javascript)  (0) 2025.02.10
[프로그래머스] 삼총사 (Javascript)  (1) 2025.02.07
[프로그래머스] 이상한 문자 만들기 (Javascript)  (0) 2025.02.05
[프로그래머스] 예산 (Javascript)  (0) 2025.02.04
[프로그래머스] 크기가 작은 부분 문자열 (Javascript)  (2) 2025.02.03
'Algorithm/프로그래머스 LV1' 카테고리의 다른 글
  • [프로그래머스] 최소직사각형 (Javascript)
  • [프로그래머스] 삼총사 (Javascript)
  • [프로그래머스] 이상한 문자 만들기 (Javascript)
  • [프로그래머스] 예산 (Javascript)
집으로 감자
집으로 감자
Hello World
  • 집으로 감자
    Potato to Home
    집으로 감자
  • 전체
    오늘
    어제
  • 링크

    • Github
    • 분류 전체보기
      • Front-end
        • TIL
        • Javascript
        • Typescript
        • React
        • Next.js
        • CSS
        • 라이브러리
      • Algorithm
        • 프로그래머스: 기초 트레이닝
        • 프로그래머스 LV1
      • TroubleShooting
      • Problem & Solution
      • Project
      • Programing Knowledge
        • 개발 용어
        • CS
        • 운영체제
        • 자료구조
        • 데이터 베이스
  • 태그

    react
    반응형웹
    http
    styledcomponent
    코딩테스트
    개발용어
    JavaScript
    회고
    문제해결
    tanstackquery
    CSS
    Til
    실행컨텍스트
    트러블슈팅
    프로그래머스
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
집으로 감자
[프로그래머스] 3진법 뒤집기 (Javascript)
상단으로

티스토리툴바