ALGORITHM/Kakao

(C++) 2018 KAKAO BLIND RECRUITMENT[3차] n진수 게임

김쿸후 2021. 3. 16. 20:04

1. 문제

programmers.co.kr/learn/courses/30/lessons/17687

 

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

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

programmers.co.kr

2. 풀이

숫자를 N진수로 바꾼 뒤 string을 만들어서 순서에 맞게 string에서 뽑으면 되는 간단한 문제였다.  

  • N진수로 바꾸기

순서대로 0부터 N진수로 바꿨다. 

시작 : a = i

r = a%n

a = (a - r) / n

 

 

  • string에 넣기

char 은 string 뒤에 push_back 할 수 있다는 성질을 이용하여 int -> 아스키코드 char로 바꾼 뒤 push back 해주었다.

 

3. 코드

#include <string>
#include <vector>

using namespace std;

string solution(int n, int t, int m, int p) {
    vector <char> numArr;
    numArr.push_back('0');
    int i = 1;
    
    //숫자 배열 만들기
    while(numArr.size() < (t*m)){
           vector <char> element;
            int a = i;
            while(a > 0){
            int r = a%n;
            a= (a -r)/n;
            char alp;
            //10진수 이상일 경우
            if(r>=10){
            alp = (char)((r-10)+65);
            }
            else{ 
             alp = (char)(r+48);
            }
            element.push_back(alp);
         }
        for(int j = element.size()-1 ; j >= 0 ;j--){
            numArr.push_back(element[j]);
        }
        i++;
    }
    
    //result 출력하기
    string answer = "";
    for(int i=0;i< t;i++){
        answer.push_back(numArr[(i*m)+p-1]);
    }
    return answer;
}

 

4. 그외

초기화를 반복문 밖에다가 하는 바람에 계속 메모리 에러가 났다.

꼼꼼히 확인하는 습관을 가지자...