본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

[java/python] 프로그래머스 Lv2. - n진수 게임

코딩테스트 연습 - [3차] n진수 게임 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

문항이 조금 복잡했다.

문제에서 가장 중요한 것은 

10진수를 입력받은 n진수로 변환하는 것.

2진수, 8진수, 16진수는 파이썬 내장함수가 존재하지만 (bin(), oct(), hex())

나머지는 직접 구현해야 했다.

다른 코드를 참고하였다.

 

 

[python]

* divmod(a,b) : a를 b로 나눈 몫과 나머지를 튜플 형태로 반환한다.

* int(string, n) : n진수의 string을 10진수로 변환한다. (참고)

def convert(num, base):
    tmp = "0123456789ABCDEF"
    q,r = divmod(num, base)

    if q == 0:
        return tmp[r]
    else:
        return convert(q,base) + tmp[r]
    
def solution(n, t, m, p):
    answer = ''
    test=''
    
    for i in range(m*t):
        test+= str(convert(i,n))
        
    while len(answer) < t:
        answer+= test[p-1]
        p+=m
    return answer

 

 

[java]

* 문자열 저장을 위해 StringBuilder를 사용한다.

* Integer.toString(a,b) : a를 b진수의 값으로 변환한다.

* Integer.parseInt(a,b) : b진수인 a를 10진수로 변환한다.

package programmers_java;

public class lv2_12 {
    
    public String Solution(int n , int t, int m, int p) {
        StringBuilder convert = new StringBuilder();
        StringBuilder answer = new StringBuilder();
        
        for(int i=0; convert.length() < m*t ; i++) {
            convert.append(Integer.toString(i,n));
        }
        
        for(int i = p-1 ; answer.length() < t; i+=m) {
            answer.append(convert.charAt(i));
        }
            
        return answer.toString().toUpperCase();
        
    }
    
    public static void main(String[] args) {
        lv2_12 test = new lv2_12();
        System.out.println(test.Solution(16, 16, 2, 1));
    }
}

 

728x90