Swift랑 친해지기/programmers 풀기

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

데브킹덕 2022. 8. 3. 17:33

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

answer 변수 

3진법에서 뒤집어진 수를 10진수로 변환해서 반환할때 사용

 

result Int형 배열 

n을 3으로 반복하여 나누어 나머지를 배열에 넣어 사용할 예정

 

k 변수 

n의 값을 받을 변수

 

풀이방법

1. n의 값을 받은 k가 3으로 나누어 질때동안 반복하기 위해 while 문 사용

2. 반복하는 동안 k를 3으로 나누었을때 나머지를 j 변수에 값으로 초기화

3. k 를 3으로 나눈 몫을 k값으로 주었음. (나머지를 먼저 계산해야 k값이 변하지 않으므로 순서 중요)

4. j 값 result 배열에 추가

5. 반복문이 끝나면 k를 result 배열에 추가

6. reverse()함수를 이용해서 뒤집어준다. 

-> 이유 [0011]일때 3에0승이 1이고 3에 1승이 1이고 3에 2승이 0이고 3에 3승이 0이기때문에 

반복문으로 10진법으로 변환할시 3에 0승부터 접근하기 위하여 reverse를 사용함 

7. 반복문을이용해서 0부터 result의 count 전까지 반복한다. 

result의 인덱스 x 3의 i승 을 answer에 반복하여 더하여 결과를 도출했다. 

 

이떄 pow 함수를 이용해 제곱을 구했다. 

pow(_ x: _y:)

주어진 거든제곱으로 거듭난 십진수를 반환

이 작업의 결과에 Decimal유형이 제공할 수 있는 것보다 더 높은 정밀도가 필요한 경우 결과는 반올림 모드를 사용하여 반올림됩니다.

 

import Foundation

func solution(_ n:Int) -> Int {
    
    var answer = 0
    var result = [Int]()
    var k = n

    while k >= 3 {
        let j = k % 3
        k = k / 3
        result.append(j)
    }
    result.append(k)   
    result.reverse()
   
    for i in 0..<result.count{
        answer += result[i] * Int(pow(3.0, Double(i)))
    }
    return answer
}