Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

혼종 꼬지마루

[SWEA] 5658 - 보물상자 비밀번호 본문

Algorithms/SIMULATION

[SWEA] 5658 - 보물상자 비밀번호

꼬지마루 2018. 9. 21. 14:24

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo

(이 글이 문제가 될 시 삭제하도록 하겠습니다.)


기출문제인 톱니바퀴처럼 문자열을 돌려주면 쉽게 해결 할 수 있는 문제


일단 입력되는 문자열을 N/4만큼씩 잘라서 검사를 해 준다


map으로 문자열을 저장하면 하나의 문자열을 인덱스처럼 사용할 수 있기 때문


이 인덱스에 해당하는 문자열이 존재한다면 dab배열에 담지 않고, 없다면 잘라준 문자열을 16진수 -> 10진수로 바꾸어 dab 배열에 담아준다.


마지막으로 dab배열을 내림차순 정렬 후, K-1번째 숫자를 출력하면 끝


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
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <cstdio>
#include <map>
#include <algorithm>
#include <cmath>
#define SIZE 30
using namespace std;
 
char arr[SIZE];
int dab[SIZE*SIZE*SIZE];
int T, N, K, pos;
 
void rotate()
{
    char tmp = arr[0];
    for (int i = 1; i < N; i++)
        arr[i - 1= arr[i];
    arr[N - 1= tmp;
}
 
bool com(const int i, const int j)
{
    return i > j;
}
 
int main(void)
{
    scanf("%d"&T);
    for (int tc = 1; tc <= T; tc++)
    {
        scanf("%d %d %s"&N, &K, arr);
        int len = N / 4;
        pos = -1;
        map <string, int> check;
        for (int t = 0; t < len; t++)
        {
            for (int i = 0; i < N; i += len)
            {
                char tmp[8= { };
                int st = -1;
                for (int j = i; j < i + len; j++) tmp[++st] = arr[j];
                if (!check[tmp])
                {
                    int s = 0;
                    for (int j = 0; j < len; j++)
                    {
                        if ('A' <= tmp[j] && tmp[j] <= 'F') s += (tmp[j] - 'A' + 10* pow(16, len - j - 1);
                        else s += (tmp[j] - '0'* pow(16, len - j - 1);
                    }
                    check[tmp] = 1;    dab[++pos] = s;
                }
            }
            rotate();
        }
        sort(dab, dab + (pos + 1), com);
        printf("#%d %d\n", tc, dab[K - 1]);
    }
    return 0;
}
cs

'Algorithms > SIMULATION' 카테고리의 다른 글

[프로그래머스] (2018)KAKAO BLIND - 오픈채팅방  (0) 2018.11.09
[백준] 16235 - 나무 재태크  (0) 2018.11.08
[SWEA] 5650 - 핀볼 게임  (0) 2018.09.21
[SWEA] 5656 - 벽돌 깨기  (4) 2018.09.21
[백준] 15874 - Caesar Cipher  (0) 2018.09.17