이번에 올라온 모의 역량 중에 제일 쉬운 문제 같은데.. 역시 체감 난이도는 상대적인 듯!!!
접근 방법
1. Rotate 함수를 만든다.
2. 16진수를 10진수로 바꾸는 함수를 만든다.
3. 1과 2를 한 세트로 N/4번 해준다.
4. 순서대로 세운 후, K-1 번째 출력! -> 중복은 제거하고, 정렬된 배열은 0부터 시작이니까!!
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <stdio.h> #include <string.h> int N, K, arr[30], NUM[10000], Ch[7] = { 1, 16, 16 * 16, 16 * 16 * 16, 16 * 16 * 16 * 16, 16 * 16 * 16 * 16 * 16, 16 * 16 * 16 * 16 * 16 * 16}, num_Count, Down[10000], Down_num; char String[30]; void Rotate() { int temp = arr[N - 1]; for (int i = 0; i < N - 1; i++) { arr[ N - 1 - i] = arr[N - 2 - i]; } arr[0] = temp; return; } void Change() { int n = N / 4; int num = 0; for (int i = 1; i <= 4; i++) { num = 0; for (int j = 0; j < n; j++) { //printf(" %d * %d = %d\n", Ch[j], arr[n * i - j - 1], Ch[j] * arr[n * i - j - 1]); num += (Ch[j] * arr[n * i - j - 1]); } //printf("num : %d\n",num); NUM[num_Count++] = num; } return; } int main() { int Test_Case; scanf("%d",&Test_Case); for (int T = 1; T <= Test_Case; T++) { num_Count = 0; Down_num = 0; memset(arr, 0, sizeof(arr)); memset(String, 0, sizeof(String)); memset(NUM, 0, sizeof(NUM)); memset(Down, 0, sizeof(Down)); scanf("%d %d %s", &N, &K, String); for (int i = 0; i < N; i++) { switch (String[i]) { case '0':arr[i] = 0; break; case '1':arr[i] = 1; break; case '2':arr[i] = 2; break; case '3':arr[i] = 3; break; case '4':arr[i] = 4; break; case '5':arr[i] = 5; break; case '6':arr[i] = 6; break; case '7':arr[i] = 7; break; case '8':arr[i] = 8; break; case '9':arr[i] = 9; break; case 'A':arr[i] = 10; break; case 'B':arr[i] = 11; break; case 'C':arr[i] = 12; break; case 'D':arr[i] = 13; break; case 'E':arr[i] = 14; break; case 'F':arr[i] = 15; break; } } for (int i = 0; i < N / 4; i++) { Rotate(); Change(); } int max = 0; for (int i = 0; i < num_Count; i++) { max = 0; for (int j = 0; j < num_Count; j++) { if (NUM[j] > max) { max = NUM[j]; } } for (int j = 0; j < num_Count; j++) { if (NUM[j] == max) { NUM[j] = 0; } } Down[Down_num++] = max; } printf("#%d %d\n", T, Down[K - 1]); } return 0; } | cs |
'SW 업무 관련 > SW Expert Academy' 카테고리의 다른 글
4013. [모의 SW 역량테스트] 특이한 자석 (0) | 2018.10.03 |
---|---|
4012. [모의 SW 역량테스트] 요리사 (0) | 2018.10.03 |
5653. [모의 SW 역량테스트] 줄기세포배양 (0) | 2018.09.30 |
5644. [모의 SW 역량테스트] 무선 충전 (0) | 2018.09.30 |
5656. [모의 SW 역량테스트] 벽돌 깨기 (1) | 2018.09.29 |