티스토리 뷰
□문제 설명
자연수 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>
#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 |
수학과 관련된 기능들이 정의되어있는 헤더파일 대표적인 기능(함수)에는
|
□링크
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
'[코테] > [Programmers Lv1]' 카테고리의 다른 글
[Programmers] Lv1_두 개 뽑아서 더하기 (C/C++) (0) | 2021.06.05 |
---|---|
[Programmers] Lv1_2016년 (C/C++) (0) | 2021.06.05 |
[Programmers] Lv1_약수의 개수와 덧셈 (C/C++) (0) | 2021.06.03 |
[Programmers] Lv1_로또의 최고 순위와 최저 순위 (C/C++) (0) | 2021.06.02 |
[Programmers] Lv1_음양 더하기 (C/C++) (0) | 2021.06.02 |
댓글
공지사항
최근에 올라온 글
TAG
- 1급
- 자바
- YBM
- Java
- 구름 기출문제
- 연습문제
- 배열
- YBM기출
- C
- 배열활용문제
- C++
- c언어 기출문제
- cospro기출문제
- 구름에듀 기출문제
- cospro기출
- lv2
- groomedu
- 코스프로
- 알고리즘
- CosPro
- Cos Pro
- COSPRO 2급
- 코딩테스트
- groom
- lv1
- 프로그래머스
- c언어
- 기출문제
- 구름에듀
- programmers
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함