본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 n진수 게임] c++ (풀이법, 코드)

by 말린밴댕이_공부 2023. 5. 19.
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

풀이 및 코드

진법 변환에 대해서만 생각을 한다면 굉장히 쉬운 문제였다고 생각합니다.

 

포인트는 string arithmetic = "0123456789ABCDEF"를 이용하여 결국 2진법이면 01 3진법이면 012 .... 16진법이면 모든 airthmetic을 사용한다는 것을 기억해두고 문제풀이를 진행하였습니다.

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

1번 예제를 보자
4까지 구하는 거니
0 /(0)1/10/11/100이 되는건데
여기서 둘이서 하는데 첫번째 순서이니
0       1  1  1이 되어서 0111이 되는 것이다.

결국 저는 cnt를 설정해 cnt가 t와 같게 된다면 바로 return answer을 진행해주었습니다.

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string num_conversion(int n, int num);

string solution(int n, int t, int m, int p) {
    string answer = "";
    int cnt = 0;
    int num = 0;
    int turn = 0;
    string s;
   
    while(1){
        s = num_conversion(n,num);
        for(int i = 0;i < s.length();i++){
            turn++;
            if(turn > m)
                turn = 1;
            if(turn == p){
                cnt++;
                answer.push_back(s[i]);
            }
            if(cnt == t)
                return answer;
        }
        num++;
    }
}

string num_conversion(int n, int num){
    string arithmetic = "0123456789ABCDEF";
    string con_num = "";
    if(num == 0){ //0일때도 포함해야해서 return;
        return "0";
    }
    while(num > 0){
        con_num += arithmetic[num % n];
        num /= n;
    }
    reverse(con_num.begin(),con_num.end());
    return con_num;
}
반응형

댓글