SWexpertAcademy
5658. [모의 SW 역량테스트] 보물상자 비밀번호
먼지의삶
2019. 7. 15. 23:27
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int t;
int n, k;
int pick[28];
char a[28];
vector<int> result;
int zegop(int x) {
int r = 1;
if (x == 0)
return 1;
for (int i = 0; i < x; i++) {
r *= 16;
}
return r;
}//제곱하는거, 최대 개수가 28개 -> 최대 자릿수 7개 -> 제곱 최대 6개 ->
//그냥 편하게함
void vect(int n, int rotate, vector<int>& solv) {
for (int i = 0; i < n; i += rotate) {
int pp = i % rotate;
int sum = 0;
for (int j = i; j < i + rotate; j++) {
int x = rotate - (j % rotate) - 1;
sum += pick[j] * zegop(x);
}
solv.push_back(sum);
}
}//한바퀴 돌고 -> 한 변 값 제곱 * pic 곱해서 벡터에 저장하기
void trans(int n, int rotate) {
char temp = a[n - 1];
for (int i = n - 1; i >= 1; i--) {
a[i] = a[i - 1];
}
a[0] = temp;
for (int j = 0; j < n; j++) {
if (a[j] == '1')
pick[j] = 1;
else if (a[j] == '2')
pick[j] = 2;
else if (a[j] == '3')
pick[j] = 3;
else if (a[j] == '4')
pick[j] = 4;
else if (a[j] == '5')
pick[j] = 5;
else if (a[j] == '6')
pick[j] = 6;
else if (a[j] == '7')
pick[j] = 7;
else if (a[j] == '8')
pick[j] = 8;
else if (a[j] == '9')
pick[j] = 9;
else if (a[j] == 'A')
pick[j] = 10;
else if (a[j] == 'B')
pick[j] = 11;
else if (a[j] == 'C')
pick[j] = 12;
else if (a[j] == 'D')
pick[j] = 13;
else if (a[j] == 'E')
pick[j] = 14;
else if (a[j] == 'F')
pick[j] = 15;
else if (a[j] == '0')
pick[j] = 0;
}
}//16진수 수 변환하기
bool check(vector<int>& v, int c) {
for (int i = 0; i < v.size(); i++)
if (v[i] == c)
return false;
return true;
}//다른벡터에 저장하기 전에, 중복 값 검사하기//크기가 최대 28 개정도라서 이렇게해도
//시간복잡도 적음
int main() {
cin >> t;
for (int xx = 1; xx <= t; xx++) {
scanf("%d %d", &n, &k);
for (int i = 0; i < n; i++) {
scanf("%1s", &a[i]);
}
int rotate = n / 4;
vector<int> solv;
for (int i = 0; i < rotate; i++) {
trans(n, rotate);
vect(n, rotate, solv);
}
vector<int> rr;
for (int i = 0; i < solv.size(); i++) {
if (check(rr, solv[i]) == true)
rr.push_back(solv[i]);//새로운 vector에 저장하기
}
sort(rr.begin(), rr.end(), greater<int>());//역순 정렬
printf("#%d %d %d\n", xx, rr[k-1],rr.size() );
}
return 0;
}
오랜만에 이런 원초적이게 하려고하니까 조금오래걸렸다