문제 : 2018 KAKAO BLIND RECRUITMENT [3차] n진수 게임


문자열 수학 구현 

 Input의 크기가 작아 단순 구현으로 해결할 수 있는 문제입니다. 

 숫자 0부터 1씩 키워가며 N진법으로 표현한 후, N진법으로 표현된 수를 다시 한 자리씩 순회하며 m명의 친구들에게 하나씩 배당해준다. 이때, 튜브의 차례라면 answer에 concat 해준다.

#include <string>
#include <vector>

using namespace std; 

string solution(int n, int t, int m, int p) {
	char list[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B','C', 'D', 'E' , 'F' };
	string answer = "";
	p--;
	int curN = 0, curP = 0;
	while (answer.length() < t) {
		string temp = "";
		int tempN = curN;
		do { // curN을 N진법으로 표현하자.
			temp += list[tempN % n];
			tempN /= n;
		} while (tempN);

		for (int i = temp.length() - 1; i >= 0; i--) {
			if (curP % m == p && answer.length() < t)
				answer += temp[i];
			curP = (curP + 1) % m;
		}
		curN++;
	}
	return answer;
}

 

+ Recent posts