반응형
문제 출처 :
https://www.acmicpc.net/problem/13410
알고리즘 분석 :
문제 해결에 필요한 사항
1. 구현(Simulation)
구구단에 있는 값들을 어떻게 뒤집을까?
다양한 방법들이 존재하겠지만, 필자는 아래와 같이 해결하였다.
// 구구단을 거꾸로 뒤집는 알고리즘
int num = 0;
for (int j = cnt - 1; j >= 0; j--)
{
int tmp = arr[i] / pow(10, j); // 가장 앞자리 가져와서
arr[i] = arr[i] % (int)pow(10, j); // 가장 앞자리 없애주고
ans[i] += tmp*pow(10, num); // 거꾸로 구구단에 가져온 값을 넣어준다.
num++;
}
이 문제가 생각보다 정답률이 높긴한데, 나름 구현에 있어서 한번쯤 해볼만한 좋은 문제인 것 같다.
소스 코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int arr[2000]; int ans[2000]; int main() { int n, m; scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++) { arr[i] = n * i; // 몇 자리수 인지 int get = arr[i]; int cnt = 0; while (get > 0) { get /= 10; cnt++; } // 구구단을 거꾸로 뒤집는 알고리즘 int num = 0; for (int j = cnt - 1; j >= 0; j--) { int tmp = arr[i] / pow(10, j); // 가장 앞자리 가져와서 arr[i] = arr[i] % (int)pow(10, j); // 가장 앞자리 없애주고 ans[i] += tmp*pow(10, num); // 거꾸로 구구단에 가져온 값을 넣어준다. num++; } } // 오름차순 정렬 sort(ans, ans + m + 1); // 가장 큰 값 printf("%d", ans[m]); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[5347번] LCM (0) | 2017.04.21 |
---|---|
[12791번] Starman (0) | 2017.04.21 |
[1914번] 하노이 탑 (0) | 2017.04.21 |
[6588번] 골드바흐의 추측 (2) | 2017.04.21 |
[10827번] a^b (0) | 2017.04.21 |