Algorithm/Cases-Study
SWEA-5658 보물상자 비밀번호
Xi_kor
2021. 4. 16. 19:05
char로 문자형으로 배열을 받은 후에, 네 면을 서치하면서 16진수를 확인하며 int형 변수에 해당 값을 변환하며 넣어주었다. 그 이후에 네 면을 확인하는 것이 끝나면 큐의 맨 마지막 수로 시작할 수 있게끔 큐의 수 -1만큼 뒤에 붙여줍니다.
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
int main() {
int tc;
cin >> tc;
for (int T = 1; T <= tc; T++) {
int n, K;
cin >> n >> K;
queue <char> q;
for (int i = 0; i < n; i++) {
char tmp;
cin >> tmp;
q.push(tmp);
}
vector <int> v;
for (int i = 0; i < n / 4; i++) {
for (int j = 0; j < 4; j++) {
int res = 0;
for (int k = 0; k < n / 4; k++) {
res = res * 16;
char tmp = q.front();
q.pop();
q.push(tmp);
if (tmp >= 'A' && tmp <= 'F') res += tmp - 55;
else res += tmp - '0';
}
v.push_back(res);
}
for (int j = 0; j < n - 1; j++) {
char tmp = q.front();
q.pop();
q.push(tmp);
}
}
sort(v.rbegin(), v.rend());
int cnt = 0;
for (int i = 0; i < v.size(); i++) {
if (i!=0&&v[i] == v[i - 1]) continue;
else cnt++;
if (cnt == K) {
cout << "#" << T << " " << v[i] << '\n';
}
}
}
return 0;
}