728x90
▶문제 : 코딩 테스트 연습 - 3진법 뒤집기 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
▶코드 작성(개선 코드 밑에 있음)
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char str[101];
int len;
void func(int n) //3진법 뒤집어서 str 저장
{
if (n / 3 >= 1) func(n / 3); //재귀함수를 먼저 호출
str[len++] = n % 3 + '0'; //문자열에 숫자를 저장하기 위해 '0'을 더함
}
int solution(int n)
{
int answer = 0;
int i, j, res;
func(n); //3진법 뒤집어서 저장하는 재귀함수 호출
for (i = 0; i < len; i++)
{
res = 1;
for (j = 0; j < i; j++) //3씩 곱함
{
res *= 3;
}
answer += (str[i] - '0') * res; //3진법으로 저장된 str[i]을 10진법으로 저장
}
return answer;
}
3진법으로 변환한 값을 문자열 str에 저장하는 부분을 제거해보면 어떤지 생각해서 다시 코드를 짜보았다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n)
{
int answer = 0;
int i, len = 0, res;
for (i = n; i / 3 >= 1; i /= 3, len++);//3진법 자리수 구하기
while (n >= 1)
{
res = 1;
for (i = 0; i < len; i++)//3진법 자리수만큼 3을 곱해줌
{
res *= 3;
}
answer += (n % 3) * res;
n /= 3;
len--;//자리수 감소
}
return answer;
}
▶해석
for문을 이용해 3진수의 자릿수를 구하고 n값을 3으로 나눈 나머지 값에 그 자릿수에 맞게 3을 곱하여 값을 구한다. 사실 말로 설명하기가 힘들다. 못 알아듣는 것도 맞는 말이다.
728x90
'프로그래머스 > C' 카테고리의 다른 글
| 프로그래머스 Level 1 : 최소직사각형 C언어 (0) | 2021.11.28 |
|---|---|
| 프로그래머스 Level 1 : 수박수박수박수박수박수? C언어 (0) | 2021.11.28 |
| 프로그래머스 Level 1 : 약수의 개수와 덧셈 C언어 (0) | 2021.11.26 |
| 프로그래머스 Level 1 : 음양 더하기 C언어 (0) | 2021.11.26 |
| 프로그래머스 Level 1 : 내적 C언어 (0) | 2021.11.26 |
댓글