본문 바로가기
카테고리 없음

프로그래머스] C++ 연습문제 - 124 나라의 숫자(level 2)

by Hwan2 2020. 6. 12.
728x90
반응형

해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다.

아래 링크를 통해 풀 수 있습니다.


https://programmers.co.kr/learn/courses/30/lessons/12899


1. 문제

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

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

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

10진법124 나라10진법124 나라
11614
22721
34822
411924
5121041

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

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

입출력 예
nresult
11
22
34
411




2. 조건

1. 3진법으로 구하면 된다. 단, 0, 1, 2가 아닌 1, 2, 4이다.



3. 풀이

3으로 나눠서 쉽게 풀 수 있지만 한가지 함정이 있습니다.
0, 1, 2가 아닌 1, 2, 4라는 것입니다.
위 조건 때문에 3으로만 N을 나눠선 원하는 결과를 얻지 못합니다.
0이 없으니깐요.... 
이거 때문에 고민을 엄청했는데, 결국 검색했습니다.
나눠 떨어질 경우에만 해당 몫에 -1을 해주면 되더군요......

아래는 코드입니다.


4. 코드

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";
    int share = n;
    int remainder = -1;
    
    while (share!=0) {
        remainder = share % 3;
        share = share / 3;

        if (remainder == 0) { //나누어 떨어질 경우 몫을 1빼준다.
            answer = "4" + answer;
            share--;
        }
        else if (remainder == 1) {
            answer = "1" + answer;
        }
        else if (remainder == 2) {
            answer = "2" + answer;
        }
    }

    return answer;
}


반응형

댓글


스킨편집 -> html 편집에서