프로그래밍/백준
[백준 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함수에서 호출하여 거꾸로 된 수를 리턴받아 대소비교해주면 된다.