알고리즘 스터디

[프로그래머스] 124 나라의 숫자(C++)

coding_ 2021. 8. 24. 01:17
728x90
반응형

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

1. 문제

문제링크

2. 접근법

  • 문제 접근
    • 숫자는 1, 2, 4 세개밖에 없다.
    • n=1 인 경우, 124진법은 1이고 3으로 나눈 나머지는 1
    • n=2 인 경우, 124진법은 2이고 3으로 나눈 나머지는 2
    • n=3 인 경우, 124진법은 4이고 3으로 나눈 나머지는 0
    • 몫이 0이 아닐때까지 반복하는데 3과 나누어 떨어지는 경우는 몫이 1생기기 때문에 -1을 해줘야 한다.

3. 코드

#include <string>
#include <vector>

using namespace std;

string solution(int n) 
{
    string answer = "";
    //몫에 받은 n값을 넣어주고 나머지는 -1로 초기화시킴
    int share = n;
    int remainder = -1;
	
    //몫이 0이 아닐때까지 반복
    while (share != 0) 
    {
    	//3기준
        remainder = share % 3;
        share = share / 3;

        //나누어 떨어지는 경우 몫을 1빼줌, 3을 제외한 경우 반복됨
        if (remainder == 0) 
        { 
            answer = "4" + answer;
            share--;
        }
        else if (remainder == 1) 
        {
            answer = "1" + answer;
        }
        else if (remainder == 2) 
        {
            answer = "2" + answer;
        }
    }

    return answer;
}

 

4. 결과

5. 참고

좀 더 간단한 코드를 찾아 보았는데, 4 1 2 를 각각 배열에 넣고 순회하는 방법을 사용하면 코드가 훨씬 간단해진다.

#include <string>
#include <vector>
 
using namespace std;
 
string solution(int n) 
{
    string answer = "";
    //3으로 나누어 떨어지는 경우 순서를 맞추기 위해 배열을 4, 1, 2로 선언
    string temp[3]{"4", "1", "2"};
    while (n) 
    {
        answer = temp[n % 3] + answer;
        //나누어 떨어지는 경우 몫을 1빼줌
        if (!(n % 3))
            n = n / 3 - 1;
        else
            n = n / 3;
    }
    return answer;
}
728x90
반응형