프로그래밍/백준

[백준 C언어] 2908. 상수

서요서요 2022. 12. 21. 04:21

 

나의 풀이

#include <stdio.h>

int revNum(int n) {
    int result = 0, i = 0, arr[3] = {100,10,1};
    while (n > 0) {
        result += n % 10 * arr[i++];
        n /= 10;
    }
    return result;
}

int main(void) {
    int a, b;
    scanf("%d %d", &a, &b);

    printf("%d", (revNum(a) > revNum(b)) ? revnum(a) : revnum(b));

    return 0;
}

 

숫자를 뒤집어주는 기능을 따로 빼서 함수로 만들어주었다. 

각 숫자의 위치를 바꿔서 10의 자리에 맞게 곱연산을 해준 후 합을 구하는 로직인데, 

곱연산에는 Lookup Array를 사용하였다. 

사실 배열을 사용하지 않고, 밑의 바뀐 숫자를 구하는 산식을 아예 이렇게 해 주어도 된다.

result = n % 10 * 100 + n / 10 % 10 * 10 + n / 100;

 

코딩 테스트의 측면에서 보았을 때 아마도 성능은 위처럼 산식을 만들어주는 것이 더 나을 것이다.

다만 개인적인 취향으로 식이 길어지는 것을 지양하는 편이라...배열을 사용했다. 

추가로, 만약 배열을 활용하면 문제에서 제시하는 기준이 바뀌어도(세 자리 수에서 네 자리 수로 확장된다든가) 

밑의 산식을 고치지 않고 배열 크기 늘리고 앞단에 요소만 추가해주면 된다는 소소한 장점이 있다.

 

그 다음에는 main함수에서 호출하여 거꾸로 된 수를 리턴받아 대소비교해주면 된다.