hwooo
BOJ (C/C++) 17219번: 비밀번호 찾기 본문
https://www.acmicpc.net/problem/17219
17219번: 비밀번호 찾기
첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번
www.acmicpc.net



풀이
map 을 사용.
사실 이걸 몰라서 벡터를 사용해서 사이트의 맨 앞자리 알파벳에 따라 나눠 저장하여 찾았는데 map을 사용한 게 4배 정도 빨랐다.
코드 1
#include <iostream>
#include <string>
#include <map>
using namespace std;
map <string,string> Site;
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int N, M, loc;
string A, B;
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> A >> B;
Site.insert({ A,B });
}
for (int i = 0; i < M; i++) {
cin >> A;
auto idx = Site.find(A);
cout << idx->second << '\n';
}
return 0;
}
코드2
#include <iostream>
#include <string.h>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector <string> V[52], P[52];
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int N, M, loc;
string A, B;
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> A >> B;
// 첫글자에 따라 나눠서 벡터에 삽입
if (A[0] >= 'a') loc = A[0] - 'a';
else loc = A[0] - 'A' + 26;
V[loc].push_back(A);
P[loc].push_back(B);
}
for (int i = 0; i < M; i++) {
cin >> A;
// find_loc
if (A[0] >= 'a') loc = A[0] - 'a';
else loc = A[0] - 'A' + 26;
auto idx = find(V[loc].begin(), V[loc].end(), A);
// print
int a = idx - V[loc].begin();
cout << P[loc][a] << '\n';
}
return 0;
}'Study > Algorithm' 카테고리의 다른 글
| BOJ (C/C++) 1013번: Contact (0) | 2023.05.24 |
|---|---|
| BOJ (C/C++) 1174번: 줄어드는 수 (0) | 2023.05.21 |
| BOJ (C/C++) 17484번: 진우의 달 여행 (Small) (0) | 2023.05.21 |
| BOJ (C/C++) 4779번: 칸토어 집합 (0) | 2023.05.20 |
| BOJ (C/C++) 24313번: 알고리즘 수업 - 점근적 표기 1 (0) | 2023.05.20 |