알고리즘 공부/C++
SWEA 5658번 [모의 SW 역량테스트] 보물상자 비밀번호 C++ 문자열, 정렬
마달랭
2024. 8. 19. 14:03
반응형
리뷰
부분 문자열 생성과 문자열로 이루어진 16진수를 10진수로 변환하고, 정렬하는 문제
문제 풀이
- 각 테스트 케이스마다 정수 n, k값과 문자열 s를 받아와 준다.
- 정수형 벡터 lst를 초기화 하고, n번의 for문을 돌려준다.
- 문자열 s의 앞 부터 n을 4로 나눈 값 만큼의 부분의 부분 문자열을 생성하고 이를 10진수로 변환해 준다.
- 만약 lst 내에 해당 숫자가 없을 경우 lst에 추가해준다.
- 그리고 제일 앞쪽의 문자를 뒤쪽으로 옮긴 뒤 탐색을 계속 진행해 준다.
- for문이 종료되었을 경우 lst를 내림차순으로 정렬해 주고 k - 1 번째 인덱스의 수를 출력해 주면 된다.
참고 사항
stoi(temp, nullptr, 16);
문자열을 16진수로 인식하고 10진수로 변환하는 함수
정답 코드
#include<iostream>
#include<deque>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int tc, n, k;
int main() {
cin >> tc;
for (int c = 1; c <= tc; c++) {
string s;
cin >> n >> k >> s;
vector<int> lst;
for (int i = 0; i < n; i++) {
string temp = s.substr(0, n / 4);
int convert = stoi(temp, nullptr, 16);
if (find(lst.begin(), lst.end(), convert) == lst.end()) lst.push_back(convert);
s = s.substr(1, n - 1) + s[0];
}
sort(lst.begin(), lst.end(), greater<int>());
cout << "#" << c << " " << lst[k - 1] << "\n";
}
}
728x90
반응형