본문 바로가기

STUDY/알고리즘

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

▶ 문제 설명

[ 문제 ] 

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

[ 예시 ] 

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

10진법 124 나라 10진법 124 나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

 

[ 제한사항 ] 

  • n은 500,000,000이하의 자연수 입니다.

▶ 풀이

처음에는 3진수와 비슷하게생각하면 되겠지 하고 3진수로 풀었는데, 

생각보다 3진수로 풀면 다른점이 있어서, (3진수는 나머지가 2가 최대.. ) 

그부분을 파악하는데 시간을 많이 쓴 문제입니다.

 

나머지가 0인경우 내림 연산을 한다는 생각으로 world[0]을 4로 만들어주고, 나눈 나머지를 -1 해주었습니다.

3진수를 생각한다면 쉬운 문제였던 것 같습니다!

 


using namespace std;

string solution(int n) {
	string answer = "";
	int world[3] = {4, 1, 2};	
	int nCopy = n;

	string temp;
	while (0 != nCopy )
	{
		int left = nCopy % 3;

		nCopy /= 3;
		if (0 == left)
		{
			nCopy -= 1;
		}

		answer.append(std::to_string(world[left]));
	}

	std::reverse(answer.begin(), answer.end());
	return answer;
}

 

다른사람의 답변중에 신기한 것이 있어서 가져왔습니다.

풀이방식은 저와 같은데, 배열을 할당하지 않고 다음처럼 사용하였습니다.

 

 

    answer = "412"[a] + answer;

 

이렇게 하면 제가 마지막에 사용한 reverse함수도 사용하지 않고, #include <algorithm>도 하지 않아도 되겠죠 ! 

reverse 할때 유용하게 사용할 수 있는 패턴인듯 합니다. 

 

 

 

 

 

'STUDY > 알고리즘' 카테고리의 다른 글

프로그래머스 - 주식가격  (0) 2020.06.11
프로그래머스 - 탑  (0) 2020.05.30
프로그래머스 - K번째 수  (0) 2020.05.20
프로그래머스 - 모의고사  (0) 2020.05.13
프로그래머스-완주하지 못한 선수  (0) 2020.05.11