[Level1] 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 해야 합니다.
◇ 초기 내용
※ [출처] 프로그래머스-코딩테스트 연습-문제명
※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.
#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;
}
◇ 실행결과
◇ 출처
https://programmers.co.kr/learn/challenges
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr