본문 바로가기

C, C++, C#/Algorithm

프로그래머스 - 124 나라의 숫자

반응형

이번에 풀어본 문제는 124나라의 숫자(12899번)문제를 풀어보았다. 풀어본 모든 문제를 포스팅 하는 것은 아니지만.... 어렵지 않은 문제인데 너무 헤맸다....(3시간이나 걸렸다...) 물론 나 홀로 혼돈의 미로 속으로 빠졌기 때문이다...

 

코딩테스트 연습 > 연습문제 > 124 나라의 숫자
programmers.co.kr/learn/courses/30/lessons/12899

문제 : 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 
124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 

문제를 보고 2가지를 떠올려서 코딩을 하였다.(누구나 쉽게하는 생각..)
1. 10진법을 3진법 전환
2. 진법 변환 시 나누기, 나머지로 1, 2, 4로 치환

정말 저 늪에 빠져서 2시간을 헤매고 두 가지를 깨달았다.

1. 다른 진법 변환 시에는 0부터 값이 매겨진다. 
2. 나머지를 문자로 치환하는 과정에서 0 -> 2, 1 -> 0, 2 -> 1로 변경이 필요하다...  

 

char chT[3] = { '1' , '2' , '4' };

char ConvertNmg(int nNmg)
{
	int nIdx = 0;
	if (nNmg == 0)
		nIdx = 2;
	else
		nIdx = nNmg - 1;
	return chT[nIdx];
}

string solution(int n) 
{
	string answer = "";

	int nDiv = n;

	while (nDiv > 0)
	{
		int nNmg = nDiv % 3;

		answer = ConvertNmg(nNmg ) + answer;

		cout << nDiv << "\t" << nNmg << "\t" << answer  << endl;

		//! 0이 제외되기때문에 경계에서는 한번 덜 처리해준다.
		if (nNmg == 0)
			nDiv = nDiv / 3 - 1;
		else
			nDiv = nDiv / 3;
	}

	return answer;
}

 

이 문제를 풀면서 꼼꼼하지 못한 나를 반성하는 계기가 되었다. 간단한(?) 문제 속에 두 가지 트릭만 발견하면 어렵진 않은 문제인데....

반응형

'C, C++, C# > Algorithm' 카테고리의 다른 글

알고리즘 종류  (0) 2020.10.13
프로그래머스 - 정수 삼각형  (0) 2020.10.13
DP(Dynamic Programming) - 동적 계획법  (0) 2020.10.13
timb 밀리초 성능 시간 측정  (0) 2016.11.28
피보나치 수열 반복형  (0) 2016.11.23