-
[SWEA] #5658 _ 보물상자 비밀번호Problem Solving/SWEA 2019. 7. 17. 07:08
[보물상자 비밀번호] https://www.swexpertacademy.com
Rotation 돌리는 방법으로 가장 뒤의 문자를 맨 앞으로 옮겨 가능한 hex 값을 구하였다.
vector의 back()과 insert()를 이용하여 쉽게 구현할 수 있었다 :)
[ 소스 코드 ]
#include <cstdio> #include <string> #include <algorithm> #include <math.h> #include <vector> #define MAX 28 using namespace std; string val = "0123456789ABCDEF"; //Hex vector<char> treasure; int n, k; int Find_Password(); int Hex_to_Oct(string hex); int main() { int test_case; char tmp; scanf("%d", &test_case); for (int i = 1; i <= test_case; i++) { scanf("%d %d", &n, &k); for (int j = 0; j < n; j++) { scanf("%c", &tmp); if (tmp == '\n') scanf("%c", &tmp); treasure.push_back(tmp); } printf("#%d %d\n", i, Find_Password()); treasure.clear(); } return 0; } int Find_Password() { int pw, count = n / 4, check = 0; char tmp_e; string tmp = ""; vector<string> p_val; //possible hex value vector<int> pass; //oct password value for (int i = 0; i < count; i++) { for (int j = 0; j <= n; j++) { if (j % count == 0 && j != 0) { for (int k = 0; k < p_val.size(); k++) { if (p_val[k].compare(tmp) == 0) { check = -1; break; } } if (check != -1) p_val.push_back(tmp); check = 0; tmp = ""; } if(j != n) tmp += treasure[j]; } tmp_e = treasure.back(); treasure.pop_back(); treasure.insert(treasure.begin(), tmp_e); } for (int i = 0; i < p_val.size(); i++) { pw = Hex_to_Oct(p_val[i]); pass.push_back(pw); } sort(pass.begin(), pass.end(), greater<int>()); //Sort Desc pw = pass[k - 1]; return pw; } int Hex_to_Oct(string hex) { int result = 0, idx = 0; for (int i = (n / 4) - 1; i >= 0; i--) { result += (int)pow(16, i)*val.find(hex[idx++]); } return result; }
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA] #2805 _ 농작물 수확하기 (0) 2019.08.04 [SWEA] #1215 _ 회문1 (0) 2019.08.04 [SWEA] #1249 _ 보급로 (0) 2019.07.17 [SWEA] #1208 _ Flatten (0) 2019.07.10 [SWEA] #1240 _ 단순 2진 암호코드 (0) 2019.07.03 댓글