[URL]
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
www.swexpertacademy.com
[풀이 과정]
* 시뮬레이션
(예시)
(1, B, 3, B, 3, B, 8, 1, F, 7, 5, E) 12개의 숫자가 주어지고 K가 10인 경우
1. input & init
2. 한 변의 자리수 계산, 자릿수만큼 로테이션
3. input[] 배열을 자리수 길이만큼 끊어서 계산
4. 자리수에 해당 하는 temp[] 배열에 값 저장
ex) 3자리씩 1B3, B3B, 81F, 75E
5. temp값을 long형태로 변환 후 벡터v 에 저장
6. 내림차순 정렬, 중복값 제거
[소스 코드]
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 112 113 114 115 116 | #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <algorithm> using namespace std; char sixteen[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B' ,'C', 'D', 'E', 'F' }; int N, K; char input[29]; char copy_input[29]; vector <long> v; void rotate() { for (int i = 0; i < N; i++) { if (i == 0) copy_input[i] = input[N - 1]; else copy_input[i] = input[i - 1]; } } bool cmp(long a, long b){ return a > b; } int main() { int T; scanf("%d", &T); for (int tc = 0; tc < T; tc++) { v.clear(); scanf("%d %d", &N, &K); scanf("%s", &input); // 한 변에 들어갈 자리수 결정 int totalCnt = N / 4; // 크게 for문 돌린다. totalCnt 번 for (int i = 0; i < totalCnt; i++) { // i만큼 회전 input[] 배열 뒤로 1칸식 밀어주기 if (i == 0) { for (int j = 0; j < N; j++) { copy_input[j] = input[j]; } } else { rotate(); } // temp 추출 ! char temp[7]; for (int j = 0; j < N; j++) { if (j % totalCnt == 0) { for (int k = 0; k < totalCnt; k++) { temp[k] = copy_input[j + k]; } long valTemp = 0; for (int k = 0; k < totalCnt; k++) { int indexVal; for (int q = 0; q < 16; q++) { if (temp[k] == sixteen[q]) { indexVal = q; break; } } valTemp += (indexVal * pow(16, totalCnt - k - 1)); } v.push_back(valTemp); } } // input[] 초기화 for (int j = 0; j < N; j++) { input[j] = copy_input[j]; } } // 내림차순 정렬 sort(v.begin(), v.end(), cmp); // 중복값 제거 for (int i = 0; i < v.size() - 1;) { long cmp = v[i]; if (cmp == v[i + 1]) v.erase(v.begin() + i); else i++; } printf("#%d %d\n", tc+1, v[K-1]); } return 0; } | cs |
'Algorithm > SWEA' 카테고리의 다른 글
5653. [모의 SW 역량테스트] 줄기세포배양 (0) | 2019.08.01 |
---|---|
5644. [모의 SW 역량테스트] 무선 충전 (0) | 2019.07.30 |
1249. [S/W 문제해결 응용] 4일차 - 보급로 (0) | 2019.07.11 |
[SWEA] - 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2019.07.05 |
[SWEA] - 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (0) | 2019.07.01 |