코딩테스트

프로그래머스 - 3진법 뒤집기 (레벨1, swift)

momo_9 2020. 11. 5. 00:17

문제출처 

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

 

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

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

programmers.co.kr

 

문제설명 

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

 

제한 사항

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

 

입출력 예

n  result
45 7
125 229

 

입출력 예 설명

입출력 예 #1

-  답을 도출하는 과정은 다음과 같습니다.

n(10진법) n(3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7

-  따라서 7을 return 해야 합니다.

 

입출력 예 #2

- 답을 도출하는 과정은 다음과 같습니다.

n(10진법) n(3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7

-  따라서 229를 return 해야 합니다.

 

 

 

✨문제풀이

그렇게 어려운 문제는 아니다. 

문제에서 설명해준 도출 과정을 그대로 코드로 구현하면 된다.

 

1) 먼저 10진법 n을 3진법으로 바꾸어 준다

 -> String(n, radix: 3) : n을 3진수로 바꾼 값을 String타입으로 반환해준다

 

2) 3진법으로 바꾼 수를 반전시켜 준다

 -> String(ternary.reversed()) : 문자열의 순서를 반대로 바꾸어 반환해준다

 

3) 3진수를 10진수로 변환시켜준다

 -> 0021(3진수)를 10진수로 바꾸는 식은 아래와 같다.

      (0 * 3^3) + (0 * 3^2) + (2 * 3^1) + (1 * 3^0)

 -> pow()메소드를 사용하여 거듭제곱을 계산해준다.

     pow(3.0, 2.0) : 3^2거듭 제곱 계산을 해준다. 

 -> 반전시킨 3진법 수를 위의 방법을 통해 10진법으로 변환해주면 된다