[C++로 풀이] n진수 게임⭐⭐
카테고리: Programmers
태그: Coding Test Algorithm
📌 n진수 게임
난이도 ⭐⭐
🚀 문제
🚀 내 풀이 ⭕
#include <string>
#include <vector>
using namespace std;
char IntToChar(int num) {
switch (num) {
case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9:
return '0' + num;
case 10:
return 'A';
case 11:
return 'B';
case 12:
return 'C';
case 13:
return 'D';
case 14:
return 'E';
case 15:
return 'F';
}
}
int CharToInt(char num) {
switch (num) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
return num - '0';
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
}
}
string solution(int n, int t, int m, int p) {
string answer = "";
string prevNum = "0";
string totalStr = "0";
while (totalStr.length() < t * m) {
for (int i = prevNum.length() - 1; i >= -1; --i) {
if (i == -1) {
prevNum = "1" + prevNum;
break;
}
int num = CharToInt(prevNum[i]);
if (num + 1 == n)
prevNum[i] = '0';
else {
prevNum[i] = IntToChar(num + 1);
break;
}
}
totalStr += prevNum;
}
int count = 0;
for (int i = 0, count = 0; count < t; i++) {
if (i % m == p - 1){
count++;
answer += totalStr[i];
}
}
return answer;
}
- 첫 번째 : while문
- 예를 들어 이진법 (n = 2)에서
11
에 1을 더하면, 즉11
의 다음 수는100
이다.- 뒷자리부터 1을 더해서 2가 되면 일단 그 자리는
0
으로 만들고 앞자리에 다시 1을 더하러 가야한다. (1 올림) - 최상위 앞자리까지 와서도 1을 더했을때 2가 되버린다면 한 자리 더 늘어야 한다는 것이므로 맨 앞에 1을 추가해준다. 이를 i == -1 이 됐을 때 처리함
- 뒷자리부터 1을 더해서 2가 되면 일단 그 자리는
- 예를 들어 16진법 (n = 16)에서
BBA
에 1을 더하면,A + 1
은B
이므로 그대로BBB
가 된채로 종료.AAFF
에 1을 더하면 2칸 더 앞에 가서 비로소A = 1 = B
로 16이 되지 않으므로AB00
되고 종료 - 이렇게 기존
prevNum
을 수정하여 1을 더한 새로운prevNum
을 만들고 이를totalStr
에 이어 붙인다.totalStr
엔 해당 진법의 0부터 시작한 수들이 차례차례 문자열로서 붙여지게 된다. - 위 과정은 totalStr.length() >= t * m 이 될 때까지 진행하기로 했다.
t
개 구해놔야 하고 사람은m
명이니까t
번째 턴까지는 구해놔야 한다는 것이니 전체t * m
개 이상이 될 때까지만 구하면 된다.
- 예를 들어 이진법 (n = 2)에서
- 두 번째 : for문
- i % m == p - 1 일 때가 튜브가 말해야할 타이밍이다.
- 튜브가 말한 횟수가
t
번이 되면 종료한다.
- 튜브가 말한 횟수가
- i % m == p - 1 일 때가 튜브가 말해야할 타이밍이다.
저렇게 switch문 일일이 쓸 필요없이 “0123456789ABCDEF” 문자열에서 인덱스로 접근해도 괜찮았을 것 같다..
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기