swea
SWEA::5658 보물상자 비밀번호
software expert academy
swea::5658 보물상자 비밀번호
시사점
- 기초적인 구현 문제입니다.
이해(3)
- 변의 갯수에 대한 설명이 나와있지 않습니다.
- 그림만 보고 4변인 것을 유추해야합니다.
- 4 변에 각 숫자가 n/4개씩 있습니다.
- 이 숫자들을 한칸씩 shift해가며 나타낼 수 있는 총 숫자의 갯수를 구하고,
- 중복을 제거한 후, 문제에서 원하는 k번째 숫자를 10진수로 바꾸어 출력합니다.
설계, 손 코딩(3)
- 손으로 중심이 되는 코드를 구현합니다.
- shift는 최대 (n/4) - 1번 해줄 수 있습니다.
- 그리고, n/4 개씩 떼어내어 줍니다.
복잡도
- (n/4) * (n/4)
구현(15)
#include<bits/stdc++.h>
#define endl '\n'
#define pb push_back
#define all(v) (v).begin(), (v).end()
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
int n, th;
int hex2dec(string s){
int ret = 0, itr = 1;
reverse(all(s));
rep(i, 0, s.size()){
if(s[i] >= 'A'){
ret += (s[i] - 'A' + 10) * itr;
}else{
ret += (s[i] - '0') * itr;
}
itr *= 16;
}
return ret;
}
void process(){
cin >> n >> th;
string s; cin >> s;
vector<string> ans;
// shifts
rep(i, 0, (n/4)){
if(i) s = s[n-1] + s.substr(0, n-1);
// cut
for(int j = 0; j < n; j += (n/4)){
ans.pb({s.substr(j, n/4)});
}
}
sort(all(ans));
ans.erase(unique(all(ans)), ans.end());
reverse(all(ans));
cout << hex2dec(ans[th-1]) << endl;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int tc; cin >> tc;
rep(t, 1, tc+1){
cout << "#" << t <<" ";
process();
}
return 0;
}