티스토리 뷰

문제 링크

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0�

programmers.co.kr

 

 

풀이

 

// 요약

반복문(answer의 length()가 t가 되면 break;){

  num을 n진법으로 변환(do-while문 이용) --- 거꾸로 들어가므로 reverse해준다.(<algorithm> 헤더 포함)

  내 차례일 때만 answer에 기록 --- % 연산자를 사용하여 내 순서를 계속 체크한다.

}

 

while문에서 순서 생각하는 것이 번거로워 true문으로 돌리고 if문으로 break 했다.

 

더보기
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

// n진법, answer이 길이 t, 참가 인원 m, 튜브 순서 p
// n진법 2, 8, 10, 16 등.
string solution(int n, int t, int m, int p) {
    string answer = "";

    int num = 0;
    int index =0;
    while(true){
        string s = "";
        int temp = num;
        // n진법 변환
        do{
            int remain = temp%n;
            if(remain < 10) 
                s += '0' + remain;
            else
                s += 'A' + (remain-10);
            temp /= n;
        }while(temp!=0);
        reverse(s.begin(), s.end());
        // cout<<"s = " <<s<<endl;
        
        // answer에 push
        for(int i=0; i<s.length(); i++){
            if(index%m == p-1) answer += s[i];
            if(answer.length() == t) break;
            index++;
        }
        if(answer.length() == t) break;
        num++;
        // cout<<"answer = "<<answer<<endl;
    }
    
    return answer;
}
728x90
반응형
댓글
05-01 14:49
링크