알고리즘/프로그래머스

프로그래머스 - 2018 KAKAO BLIND RECRUITMENT [3차] n진수 게임

시나모온 2020. 5. 1. 06:43

문제 링크입니다 : https://programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음에 익숙한 듯하면서도 어떻게 접근해야 할지 몰라서 브루트 포스 방법으로 해보려고 했었다.

 

그런데 어떻게 구현해야할 지 잘 모르겠어서, 덮고 다음 날에 다시 시도했었다.

 

그러니, 뽑을 갯수만큼만 문자열을 완성해놓고, 게임을 하는 인원이 m으로 일정하니 m 간격으로 뽑기만 하면 된다는 걸 깨달았다.

 

그러고 다시 풀었는데.. 아이디어를 떠올리니 구현은 크게 어렵지 않았다.

 

 

// https://programmers.co.kr/learn/courses/30/lessons/17687
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

string toChar(int n) {
    if(n <= 9) return to_string(n);
    switch(n) {
        case 10:
            return "A";
            break;
        case 11:
            return "B";
            break;
        case 12:
            return "C";
            break;
        case 13:
            return "D";
            break;
        case 14:
            return "E";
            break;
        case 15:
            return "F";
            break;
    }
    return "";
}

string solution(int n, int t, int m, int p) {
    string answer = "";
    int maxLen = t * m;
    
    string str = "";
    
    int cnt = 0;
    while(true) {
        string temp = "";
        int num = cnt++;
        while(true) {
            temp += toChar(num % n);
            num /= n;
            if(num == 0) break;
        }
        reverse(temp.begin(), temp.end());
        str += temp;
        if(str.size() > maxLen) break;
    }
    
    
    int len = t;
    for(int i = 0; i < t; i++) {
        answer += str[p - 1 + i * m];
    }
    
    
    return answer;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~