공부/알고리즘&자료구조

항해99 문제29번풀이 (3진법 뒤집기,프로그래머스)

youngble 2021. 11. 9. 22:02

https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

내가 푼 방법:

접근법

먼저 js에서 어떤 메서드가 10진수의 값을 3진수로 바꿀수있는지 , 문자열 위치를 바꿀수있는법, 그 string 값을 다시 10진수 정수로 바꾸는 메서드들을 찾아보았다. 그결과 toString(),split(),reverse(), parseInt()가 필요하였고, 각각의 메서드의 기능과 파라미터들의 의미를 먼저 이해하였다.

코드풀이

2줄. 변수 b 에 10진수 숫자를 인자로 받는 n을 toString을 써서 3진수로 바꿔줌

4줄.  aa는 나중에 reverse 를 이용해 바뀐 각각의 문자열을 하나의 문자열로 넣어줄때 필요한 변수로 선언하였다.

5줄. 기존에 3진수로 바뀌었단 b를 일단 문자열 하나하나를 split을 통해 분리시키고, reverse메서드를 이용해 그 위치들을 반대로 바꿔주고 reversestr 이라는 변수에 담아주었다. 하지만 이때는 배열 형태이며 문자열 하나하나 분리되어있기때문에 이를 다시 aa에 한숫자형태의 문자열로 넣어줘야한다

7줄~8줄: 따라서 or문을 돌려 그에 해당하는 [i]번째 인덱스에 해당하는 문자열값들을 하나씩 aa 배열에 넣어주었다. 

11줄. 합쳐진 하나의 문자열 aa를 10진수로 바꿔주기위해 parseInt를 사용하였고 그 값을 return 반환하였다.

다른 방법 :

위와 같은 방식이지만 for문을 없애고 join매서드를 사용하여 분리된 문자열을 하나로 합쳐준것이다.

다른사람 풀이:

더보기

toString,reverse,join 은 같지만 전개구문이라는 ... 사용하여 한줄로 끝냈다. 아래 찾아보니

배열 형태로 된 값들을 … 을 사용하여 순서대로 sum 이라는 함수에 넣어줄수 있게 하는것이다. 

원래 object  형식이므로 인덱스를 일일이 넣어주거나 아예넣지를 못하는형태인데, 배열에서 바로 인수로 사용할수있게 키-값 형태로 만들어주는 구문이다.