본문 바로가기
알고리즘

[알고리즘] N진수 게임

by keel_im 2021. 5. 4.
반응형

포인트

1. 진법 변환을 잘할 수 있는가?

2. 프로그램 로직을 이해 할 수 있는가?

 

#include <string>
#include <algorithm>


using namespace std;

char number[18] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                   'A', 'B', 'C', 'D', 'E', 'F'};
//16진수 진법 변환을 하는 법
string number_to_n(int num, int n){ // 진법변환은 이렇게 해보자
    //num은 원하는 숫자
    //n은 원하는 진법
    string result;

//    string s = bitset<8> (num).to_string();
//    cout<<"s: "<<s<<'\n';

    if(num == 0) return "0"; // 0은 무슨 진법이 와도 0
    while(num > 0){ //
        result += number[num % n];
        num /= n;
    }

    reverse(result.begin(), result.end()); //거꾸로 돌려준다,
    return result;
}

string number_to_2(int num, int n){
	string result;
    
    if(num == 0) return "0";
    while(num>0) {
    	result = number[num % n] + result;
        num/n;
    }
    
    return result;
}

string solution(int n, int t, int m, int p) {
    string answer;
    string temp;

    int mt = m * t;
    for(int num = 0; temp.size() <= mt; num++){
        temp += number_to_n(num, n);
    }

    for(int i = 0; i < t; i++){
        answer += temp[(m*i)+(p-1)];
    }

    return answer;
}

 

이진 법의 경우 stl 에서 bitset을 지원합니다. 2진수에서는 상당히 유용합니다.

python

DIGITS = list('0123456789ABCDEF')


def n_to_base(n, base):
    if n == 0:
        return '0'

    # 각 자리수에 해당하는 문자열을 담을 리스트
    result = []
    while n > 0:
        # 제일 마지막 자리의 숫자 구하기. 예를 들어 1658이면 '8'
        result.append(DIGITS[n % base])
        # 제일 마지막 자리 제거. 예를 들어 1658이면 165로
        n = int(n // base)

    # 뒤집어서 반환. 예를 들어 '8561'이면 '1658'
    return ''.join(result[::-1])


def solution(n, t, m, p):
    digits = []
    turn = 0
    while len(digits) < t * m:
        digits += list(n_to_base(turn, n))
        turn += 1
    return ''.join(digits[p-1::m][:t])

 

2021 05 04 수정 버전 파이썬

def n_to_base(n, base):
    DIGITS = '0123456789ABCDEF'
    if n == 0:
        return '0'
    result = ""
    while n > 0:
        result = DIGITS[n % base] + result
        n //= base
    return result


def solution(n:int, t:int, m:int, p:int) -> str:
    digits = []
    turn = 0
    while len(digits) < t * m:
        # t*m 명 까지 구한다.
        digits.extend(list(n_to_base(turn, n)))
        # 개수를 구한다.
        turn += 1
        #구한 것들을 이어 붙인다.
    return ''.join(digits[p - 1::m][:t])
반응형

'알고리즘' 카테고리의 다른 글

[알고리즘] 후보키  (0) 2021.05.05
[알고리즘] 파일명 정렬  (0) 2021.05.04
[알고리즘] 문자열 압축  (0) 2021.05.03
[알고리즘] Running Sum of 1d Array  (0) 2021.05.03
[알고리즘] 괄호 변환  (0) 2021.05.02

댓글