코딩테스트/C언어

[Level1] 3진법 뒤집기 답안 및 풀이

SRin23 2021. 6. 3. 22:57

◇ 문제 설명

자연수 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 해야 합니다.

 

◇ 초기 내용

※ [출처] 프로그래머스-코딩테스트 연습-문제명

※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

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

 


◇ 답안

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n) {
    int answer = 0;
    int cpn = n;

        while(cpn != 0){
            int three = cpn % 3;
            answer *= 3;  
            answer += three;
            cpn /= 3;
        }
    return answer;
}

 

◇ 답안 풀이

(※ 실행 흐름 순으로 해석됩니다.)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n) {
    int answer = 0;

    //cpn은 copy_n을 뜻하며 n을 복사하였습니다.
    int cpn = n;

 

        //cpn이 0이 아닐때까지 반복
        while(cpn != 0){

            //3진수구하기

            //cpn%3의 값을 three에 저장
            int three = cpn % 3;

            //3진법은 한 단위가 3이므로 10진법에서 각 자릿수별로 10 곱하듯, 3을 곱해줌

            //cpn의 나머지를 three가 가지고 있으므로, 맨 뒷자리 수부터 answer에 들어가므로, 

            //자연스럽게 3진법을 뒤집을 수 있음
            answer *= 3;  

            //answer에 three 누적
            answer += three;

            //사용한 값(소수점 아래의 값)을 삭제 하기 위해 cpn / 3

            cpn /= 3;
        }


    return answer;
}

 

 

◇ 실행결과

3진법 뒤집기 실행 결과

 

 

◇ 출처

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr