728x90
SMALL
백준 문제 풀이: 1764 [듣보잡]
문제 링크: https://www.acmicpc.net/problem/1764
문제 설명:
듣도 못한 사람의 명단과 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 출력하세요. 이 명단은 사전순으로 정렬해야 합니다.
입력 조건:
- 첫 번째 줄에 듣도 못한 사람의 수 N과 보도 못한 사람의 수 M이 주어집니다. (1 ≤ N, M ≤ 500,000)
- 다음 N개의 줄에는 듣도 못한 사람의 이름이 주어집니다.
- 다음 M개의 줄에는 보도 못한 사람의 이름이 주어집니다.
출력 조건:
- 듣도 보도 못한 사람의 수와 명단을 사전순으로 한 줄에 하나씩 출력합니다.
문제 해결 코드
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
map<string, int> m;
vector v;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, mCount;
cin >> n >> mCount;
string name;
for (int i = 0; i < n; i++) {
cin >> name;
m[name] = 1; // 듣도 못한 사람 저장
}
for (int i = 0; i < mCount; i++) {
cin >> name;
if (m[name] == 1) { // 보도 못한 사람도 듣도 못한 사람에 포함되면 추가
v.push_back(name);
}
}
// 사전순 정렬
sort(v.begin(), v.end());
// 결과 출력
cout << v.size() << '\n';
for (const string& s : v) {
cout << s << '\n';
}
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 `map`을 사용하여 듣도 못한 사람의 명단을 저장하고, 보도 못한 사람의 명단을 비교하여 중복되는 이름을 찾습니다.
- 입력 처리:
- `map`에 듣도 못한 사람의 이름을 저장합니다.
- 보도 못한 사람의 이름을 읽으며 `map`에서 중복 여부를 확인합니다.
- 결과 처리:
- 중복된 이름을 `vector`에 저장하고, 이를 사전순으로 정렬합니다.
- 정렬된 결과를 출력합니다.
시간 복잡도 분석:
- 입력 처리: O(N + M), 각각 듣도 못한 사람과 보도 못한 사람 입력.
- 정렬: O(K log K), K는 중복된 이름의 개수.
- 전체 시간 복잡도: O(N + M + K log K).
결과
다음은 입력 예시와 출력 결과입니다:
입력:
5 5
Jimin
Yoongi
Namjoon
Hoseok
Jin
Jimin
Tae
Yoongi
Jin
Jungkook
출력:
3
Jimin
Jin
Yoongi
듣도 보도 못한 사람의 명단이 사전순으로 정렬되어 정확히 출력됩니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 자료 구조' 카테고리의 다른 글
백준 5430번 [AC](C++) -yes6686- 티스토리 (1) | 2024.12.24 |
---|---|
백준 1927번 [최소 힙](C++) -yes6686- 티스토리 (0) | 2024.12.24 |
백준 1620번 [나는야 포켓몬 마스터 이다솜](C++) -yes6686- 티스토리 (0) | 2024.12.24 |
백준 14427번 [수열과 쿼리 15](C++) -yes6686- 티스토리 (0) | 2024.08.17 |
백준 27497번 [알파벳 블록](C++) -yes6686- 티스토리 (0) | 2024.07.13 |