본문 바로가기
프로그래머스 코딩테스트 문제/Level 1

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

by jyppro 2023. 8. 14.

3진법 뒤집기

오늘 풀어볼 문제는 월간 코드 챌린지 시즌1 출제문제 "3진법 뒤집기" 입니다. 그럼 문제를 살펴보겠습니다.

 

문제 설명

자연수 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진법으로 표현
125 11122 22111 229

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

 

시작 코드

using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

 

나의 풀이

using System;

public class Solution {
    public int solution(int n) {
    int answer = 0;
    while(n > 0) {
        answer *= 3;
        answer += n % 3;
        n /= 3;
    }
    return answer;
    }
}

 

코드 분석

int형 자연수 n이 주어지며 코드가 시작됩니다. while문으로 n이 0보다 크다면 계속 반복문 내부를 실행합니다. 내부에서는 answer 값을 3 곱하고, answer에 n을 3으로 나눈 나머지를 넣어준다음 n을 3으로 나눠주는 동작을 합니다. while문을 빠져나오면 answer값을 리턴하면서 끝이 납니다.

 

풀이 설명

이번 풀이는 예시를 적용하는 것이 더 이해하기 쉬울 것 같습니다. 입출력 예 첫번째에 들어온 n, 45로 설명하겠습니다. while문은 n이 0보다 작아지지 않는 이상 계속해서 동작하므로 첫 실행을 보겠습니다. answer값은 처음에는 0이기 때문에 *3을 해도 그대로 입니다. 이후 n % 3도 마찬가지로 0입니다. n을 3으로 나눠주면 15가 됩니다. 이제 15를 가지고 다시 실행하게 됩니다. 다시 실행해도 answer는 여전히 0이고 n이 5가 됩니다. 5로 다시 실행해봅니다. 이제부터는 유의미한 수가 나타나기 시작합니다. 5 % 3의 값 2를 answer에 넣어주고, n은 1이 됩니다. 또 다시 실행하면, answer는 6이 되고, 나머지를 계산한 1을 추가로 더해주면 answer는 7이 되고, n은 0이 되면서 while문을 빠져나오게 됩니다. 최종적으로 answer값에 저장된 7을 리턴합니다.

 

풀이를 자세히 보시면 while문을 한번씩 거칠 때마다 만들어지는 n값의 순서는 0,0,2,1로 앞뒤 반전(3진법) 과 같습니다. 해당 방법은 수를 변환하고 뒤집은 뒤에 10진법으로 표현하는 과정을 짧게 표현한 것입니다.

 

<NEXT>

오늘은 월간 코드 챌린지 시즌1 출제문제 "3진법 뒤집기" 문제를 풀어보았습니다. 다음에는 "이상한 문자 만들기" 문제를 다뤄보도록 하겠습니다. 감사합니다.