반응형

문제 출처 :


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