프로그래밍/알고리즘 문제 풀이

[백준] 14915(진수 변환기) - C언어

춤추는 선인장 2023. 5. 7. 20:19
반응형
SMALL

 

이번 문제는 정수 m, n을 받아서 10진수인 m을 n진수로 바꾸는 문제였다. 바로 저번문제에서 이진수로 변환시키는 문제처럼 하되, n진수 표현만 하면 되기에 생각보다 할만 했다. 

 

 

이전 백준 문제 풀이 10829(이진수 변환) 보러가기 -->

https://leedongchan.tistory.com/entry/%EB%B0%B1%EC%A4%80-10829%EC%9D%B4%EC%A7%84%EC%88%98-%EB%B3%80%ED%99%98-C%EC%96%B8%EC%96%B4

 

[백준] 10829(이진수 변환) - C언어

이번 문제는 정수 범위 (1 ≤ N ≤ 100,000,000,000,000)의 자연수를 받아서 이진수로 만드는 문제였다. 이 문제를 보고 100조개의 정수를 이진수로 바꾸면 대체 얼마나 많은 정수 범위가 필요하지? 얼마

leedongchan.tistory.com

 

 

 처음엔 이진수로 변환하는것처럼 n으로 나누고 저장해서 프린트 하고, 10 이상의 숫자는 조건문으로 일일이 나누었다.

이런식으로 말이다.

14915번 문제 조건문으로 나누기

#include <stdio.h>


int main() {

	int m = 0, n = 0;
    int result[101] = {0}; 

	scanf("%d", &m);
    scanf("%d", &n);
	
    int i; 
    for(i = 0; m / n != 0; i++){
        result[i] = (m % n);
        m = m/n;
    }
    result[i] = m;
    for(int j = i; j >= 0; j--){
        if(result[j] < 10){
            printf("%d", result[j]);
        }else{
            if(result[j] == 10){
                printf("A");
            }else if(result[j] == 11){
                printf("B");
            }else if(result[j] == 12){
                printf("C");
            }else if(result[j] == 13){
                printf("D");
            }else if(result[j] == 14){
                printf("E");
            }else if(result[j] == 15){
                printf("F");
            }
        }
 }
    return 0;
}

 

 하지만 이렇게 하면 코드가 무엇인지 바로 직관적으로 알수는 있겠지만, 좀 지저분하고 너무 길어진다. 

그래서 난 A, B, C, D, E, F를 문자열로 저장한 뒤 10 이상의 숫자들은 n으로 나누었을 때 나머지를 이 문자열 배열의 인덱스에 넣어 출력하는 방식으로 다시 코드를 짰다. 이런식으로 말이다.

 

14915번 문제 스트링 배열 사용

#include <stdio.h>


int main() {

	int m = 0, n = 0;
    int result[101] = {0}; 
    char abc[7] = "ABCDEF";

	scanf("%d", &m);
    scanf("%d", &n);
	
    int i; 
    for(i = 0; m / n != 0; i++){
        result[i] = (m % n);
        m = m/n;
    }
    result[i] = m;
    for(int j = i; j >= 0; j--){
        if(result[j] < 10){
            printf("%d", result[j]);
        } else {
            printf("%c", abc[result[j]%10]);
        }
    }
    return 0;
}

 이런식으로 코드를 짜니 더 보기도 편하고 깔끔하게 정리가 되었다. 알고리즘 문제를 풀 때 마다 느끼는 거지만, 정말 여러가지 다양한 풀이가 나올 수 있다는 점이 참 재미있는것 같다.

성공!!

오늘도 성공!!😁

 

https://www.acmicpc.net/problem/14915

 

14915번: 진수 변환기

변환한 n진수의 수를 출력한다. 11~16 진수의 경우 10 이상의 수는 A~F 문자를 사용한다. 예를 들어, 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F를 사용한다.

www.acmicpc.net

 

반응형
LIST