티스토리 뷰

코드 바로보기💻

 

 

문제 설명

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

 

 

 

초기화면

3진법 뒤집기 초기화면

 

 

 

완성 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
int solution(int n) {
    int answer = 0;
    int arr[1000];
    int count=0;
    int index=0;
    
    while(n){
        arr[count++] = n%3;
        printf("%d  ",n%3);
        n/=3;
    }
    
    for(int i=count-1;i>=0;i--){
        answer+=arr[i]*pow(3,index++);
    }
    
    return answer;
}

 

 

 

코드 분석

단계 과정
변수/배열 선언 최종값(10진법으로 변환한 수)를 저장할 변수 answer
3진법으로 변환했을 때, 각 자리별 값을 저장할 배열 arr
몇 자리까지 나왔는지 카운트할 변수 count
3진법을 10진법으로 변환할 때, 몇제곱이 되어야 할지 정할 변수 index
while 10진법인 n의 값을 3진법으로 변환하는 과정

n(입력값)의 값이 양수일 때 반복한다.
arr[count]의 방에 n을 3으로 나눈 나머지값을 할당한다.
n을 3으로 나누어 다음 계산을 준비한다.


입출력 예 #1
arr[0] = 45%3;
n = 45 / 3;
count = 0;

arr[1] = 15%3;
n = 15 / 3;
count = 1;

arr[2] = 5%3;
n = 5 / 3; 
count = 2;

arr[3] = 1%3;
n = 1 / 3;  
count = 3;   n=0이므로 반복 중지

arr의 값
[ 0, 0, 2, 1 ] 즉 3진법으로 변환한 수는 1200이 된다.
뒤에서부터 값을 채우기 때문
for 3진법인 n의 값을 10진법으로 변환하는 과정

1200(3진법)를 10진법으로 바꾸는 과정은
1*3의 3승 + 2*3의 2승 + 0*3의 1승 + 0*3의 0승 과 같다.

따라서  answer+=arr[i]*pow(3,index++); 를 이용하여
각 방의 값 * 3의 index++승 을 계산하여 answer에 누적한다.


이때 for문의 초기;조건;증감식을 i=0~count가 아닌
int i=count-1;i>=0;i-- 로 한 이유는
3진법을 10진법으로 변환하기 전에, 뒤집어야 하기 때문에 
1*3의 3승 + 2*3의 2승 + 0*3의 1승 + 0*3의 0승 의 순으로 계산하기 위함이다.

 

 

사용한 include문

math.h

수학과 관련된 기능
들이 정의되어있는 헤더파일

대표적인 기능(함수)에는

  • int abs(int n);  //절대값
  • double pow(double x,double y); //제곱수
  • double sqrt(double x); //제곱근
  • 가 있다.

 

 

링크

 

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

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

programmers.co.kr

 

댓글