알고리즘/프로그래머스
프로그래머스 - 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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~