티스토리 뷰


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

프로그래머스 LEVEL 2 문제를 다 풀려고 한다. LEVEL2와 백준을 비교해봤을 때 대략 백준 실버~골드하위 정도 되는것 같다.

이번 문제는 숫자를 입력받아 그 숫자를 124 나라의 규칙에 맞게 변환해야 한다.

숫자가 규칙적이 아니라 단순히 mod연산으로는 구할 수 없지만 문제를 잘 읽어보면 규칙이 보인다.

n[4]는 n[1]에 1을 붙인꼴, n[5]는 n[1]에 2를 붙인 꼴, n[6]은 n[1]에 3을 붙인 꼴이다. n[7]부터는 n[2]에 1을 붙인꼴 ... 이런식으로 흘러간다.

따라서 입력을 받은 후에 자신의 앞에 붙일 수들이 무엇인지 재귀를통해 찾도록 구현했다. 예를들어 13을 입력받으면 n[13]은 n[4]에 1을 붙인꼴이고, n[4]는 n[1]에 1을 붙인꼴이다. 그러므로 n[4]와 n[1]을 구하면 원하는 답을 얻을 수 있다.

3을 주기로 1,2,4 순서로 계속 변경하니, mod 3 연산을 통해 나머지가 1일 경우 1, 2일경우 2, 0일경우 4를 붙이도록 하면 된다.

#include <string>
#include <vector>

using namespace std;

string go(int n){
    if (n == 1) return "1";
    else if (n==2) return "2";
    else if (n==3) return "4";
    else{
        int t = (n/3);
        if (n%3 == 0) t-=1;
        string add;
        if (n%3 == 0){
            add = "4";
        }else if (n%3 == 1){
            add = "1";
        }else if (n%3 == 2){
            add = "2";
        }
        
        string ret = go(t) + add;
        return ret;
    }
}

string solution(int n) {
    string answer = "";
    answer = go(n);
    return answer;
}

'알고리즘 풀이 > 재귀' 카테고리의 다른 글

BOJ : 1992 쿼드트리  (0) 2020.08.06
BOJ 1780 : 종이의 개수  (0) 2020.08.06
BOJ : 2447 별 찍기-10  (0) 2020.08.06
BOJ 1629 : 곱셈  (0) 2020.08.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함