[알고리즘] 백준 11005 진법 변환 2 - C

POBSIZ (POBSIZ)·2023년 5월 26일
0

알고리즘

목록 보기
9/11
post-custom-banner

문제 바로가기 >

설명 & 입출력!

해설

해당 문제는 입력받은 10진수를 원하는 진법으로 변경 후 출력하면 되는 문제이다.

진법을 변환할때 가장 간단한 방법은 입력받은 10진수를 원하는 진법만큼 나눈 몫으로 표현하면 된다.

수가 10을 넘어가면 문자(A~Z)로 표현한다.

나는 해당 문제를 배열을 하나 만든 후 입력받은 10진수를 원하는 진법만큼 계속 나누어 몫을 배열에 저장한 후 배열에 저장된 수를 하나씩 출력하는 방법을 이용했다.

* 진법은 36진법까지 표현 가능하다.

코드

#include <stdio.h>

int main() {
	// n = 10진수, d = 입력받은 10진수의 복사본 
    long long int n, d;
    
    // b = b진법, i = 인덱스, a = b진법 수를 담고있는 배열
    int b, i=0, a[31];
    
    // n & b 를 받는다.
    scanf("%lld %d", &n, &b);
    
    // d 에 n의 값을 넣는다.
    d=n;
    
    // 반복
    while(1) {
    	// d를 모두 나누어 0보다 작거나 같을 경우
        if(d<=0) {
        	// a배열의 현재 인덱스(i)에 d값을 넣는다.
            a[i] = d;
            
            // 반복문 탈출
            break;
        }
        
        // a배열의 인덱스(i)에 입력받은 10진수를 원하는 진법만큼 나눈 몫의 값을 넣는다.
        a[i] = d % b;
        
        // 입력받은 10진수를 원하는 진법만큼 나눈다.
        d = d / b;
        
        // 인덱스 증가.
        i++;
    }
 	
	/// 마지막 인덱스부터 0번째 인덱스까지 역으로 순회
    for(int j=i-1; j>=0; j--) {
    	// 배열에 저장된 수가 문자로 표현하지 않아도 될 경우
        if(a[j] >= 0 && a[j] <= 9) {
        	// 정수로 해당 배열 값 출력
            printf("%d", a[j]);
        }else{
        	// 배열에 저장된 수의 크기가 9를 넘어가 문자로 표현해야 할 경우
            // 배열에 저장된 값에 55를 더해 아스키코드로 변경 후 문자로 출력
            printf("%c", (char)(a[j]+55));
        }
    }
    
    return 0;
}

마무리

이번 문제는 진법에 대한 이해만 있다면 쉽게 풀 수 있을 것 같다.

post-custom-banner

0개의 댓글