본문 바로가기
백준 알고리즘 코딩

[C언어] 백준 2908번 상수

by 1005_ 2025. 3. 22.

[ 문제 ]

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다.

이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다.

 

상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다.

예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다.

따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

 

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

[ 입력 ]

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다.

두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

[ 출력 ]

첫째 줄에 상수의 대답을 출력한다.

[ 작성한 코드 ]

#include <stdio.h>

int main(int argc, char *argv[])
{
    char A[4];
    char B[4];
    int i,j=0,k=0;

    scanf("%s %s",A,B);

    for(i = 3; i > 0; i--)
    {
        j = j * 10 + A[i-1] - '0';
        k = k * 10 + B[i-1] - '0';
    }
    
    if(j > k)
    {
        printf("%d",j);
    }
    else if(j < k)
    {
        printf("%d",k);
    }
    
    return 0;
}

 

이 문제는 풀이방법이 다양하다고 생각한다.

일단 문자열 파트로 분류되어있어 문자열을 사용해 문제를 풀이하였지만 문자열을 사용하지 않고도 문제를 풀 수 있다.

 

입력받은 세자리의 자연수의 자리를 역순으로 변경하기 위해 수식을 이용했다.

 

ex ) 734 입력

i값 A[ i ]값 A[ i - 1 ] -'0' (정수변환) j = j * 10 + A[ i - 1 ] - '0'; a값
3 '4' 4 0 * 10 + 4 4
2 '3' 3 4 * 10 + 3 43
1 '7' 7 43 * 10 + 7 437

 

이렇게 A와 B의 값을 정수형으로 변환해 그 값을 비교하는 방법으로 문제를 해결했다.

 

알고리즘 분류

  • 수학
  • 구현