n진수게임

도경원·2023년 2월 5일
0

알고리즘스터디_C++

목록 보기
26/42

문제

[프로그래머스] n진수게임
dp문제

접근

다음 두개가 필요하다

  1. 앞으로 말해질 모든 수들 담은 스트링
  2. 그 중에 튜브차례에 요소를 추출하기
  3. 정답에 담아서 출력

중요개념

char을 담은 배열, idx와 데이터 일치시킴

지금 디피를 공부하는 중인데 이게 디피방식으로 풀었는 지는 모르겠다
디피방식으로 푼다면 어떻게 풀어야 할까?

해결

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

using namespace std;

char number[18] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                   'A', 'B', 'C', 'D', 'E', 'F' };                      // 10 이상의 수를 저장해주기 위해 저장한다

string number_to_n(int num, int n) {
    string result;
    if (num == 0) {
        return "0";
    }
    while (num > 0) {               // 해당 숫자 char을 넣어줌
        result += number[num % n];  // 82%8 = 2 ; 10%8 = 2 ; 1%8 = 1 ;
        num /= n;                   // 82/8 = 10; 10/8 = 1 ; 1/8 = 0 ; 
    }                               // 82 -> 122;  // 1의 자리부터 계산해서 계속 위로 밀어내는 방식
    reverse(result.begin(), result.end());
    return result;
}

string solution(int n, int t, int m, int p) { 
    
    // n : 진수
    // t : 미리 구할 숫자갯수     ( 튜브가 게임동안에 말해야 할 숫자들 )
    // m : 게임에 참여하는 인원   ( m을 한번 돌면 튜브가 말해야 하는 숫자포함됨 )
    // p : 튜브순서

    string answer = "";
    string temp;
    int mt = m * t;
                                                  // 앞으로 말해질 모든 수 //
    for (int num = 0; temp.size() <= mt; num++) { // mt는 튜브가 말해야 하는 숫자가 모두 포함되어 있다
        string ngame = number_to_n(num, n);
        temp += ngame;
    }
                                                  // 튜브가 말할 수 추출 //
    for (int i = 0; i < t; i++) {                 // t의 갯수만큼 수를 가져옴
        answer += temp.at((m * i) + (p - 1));     // m 차례를 돌고 p를 더하면 튜브차례 (index 라서 p-1)
    }

    return answer;
}


// 코드가 잘 짜여 있는 것이 각자 해야 할 역활이 명확하고
// 위계가 있다

// ref : https://velog.io/@huijae0817/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98C3%EC%B0%A8n%EC%A7%84%EC%88%98-%EA%B2%8C%EC%9E%84

참고블로그
감사합니다!

개념정리

개념설명
n진수 변환나머지와 몫, string += 을 이용하고 데이터를 뒤집음
string reversestring을 뒤집음
string .at()string index에 있는 char 뽑아옴
문자나 수 저장배열     문자나 수를 배열로 저장, 논리적으로 idx와 data를 일치시키시고 사칙연산 결과를 idx로 입력하여 char을 가져올 수 있다
profile
DigitalArtDeveloper

0개의 댓글