[프로그래머스][3차]n진수 게임

GomHyeok·2022년 3월 26일
0
post-thumbnail

📒활용 개념

  1. 진수 변환

📌문제설명

여러 사람이 순서대로 앉아서 숫자를 하나씩 차례대로 말한다. 규칙은 다음과 같다.

  • 숫자를 0부터 시작
  • 10 이상의 숫자부터는 한 자리씩 끝ㄶ어서 말한다.

단 위의 게임을 k진수로 변환하여 진행한다. 다음과 같은 게임을 진행할 때 튜브가 말해야 하는 숫자를 주어진 갯수만큼 구하여라

  • 진법 n, 구하는 숫자의 갯수 t, 게임 참가 인원 m, 튜브의 순서 p

📌구현

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string locate ="0123456789ABCDEF";					//진수 변환 개념 참고

string change (int num, int binary){				//진수 변환 함수
    string resurt;
    
    if(num==0){
        return "0";
    }
    
    while(num>0){
        resurt=locate[num%binary]+resurt;
        num/=binary;
    }
    
    return resurt;
}

string solution(int n, int t, int m, int p) {
    string answer = "";
    string temp;									//진수 변환 결과 저장
    int num=0;
    
    for(int i=0; i<t; i++){							//answer에 들어가야할 순서에 따른 push
        while(temp.size()<=p+(m*i)){				//temp의 크기가 작을 때만 새로운 정수를 진수 변환하여 저장한다.
            temp+=change(num, n);
            num++;
        }
        answer+=temp[(p-1)+(m*i)];					//answer에 순서에 맞게 저장
    }
    
    return answer;
}

📌주의점

  • 튜브의 순서를 구하는 것이 중요하다. 그냥 for문으로 돌리는 것 보다 튜브의 순서만을 확인하는 것이 더 효율적이다
    - 튜브순서 + (전체인원 * i) = 다음 튜브의 숫자.
  • 진수 변환 사용
profile
github : https://github.com/GomHyeok/

0개의 댓글