Where who wants to meet someone

백준 Swift [1764] 듣보잡 본문

백준 알고리즘 문제 기록/집합과 맵

백준 Swift [1764] 듣보잡

Lust3r 2023. 8. 11. 16:35
728x90

난이도

실버 IV

 

문제

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

내 답안

var notHeardPeople = Set<String>()
var notSawPeople = Set<String>()
var notHeardAndSawPeople = [String]()

let nm = readLine()!.split(separator: " ").map { Int($0)! }

for _ in 1...nm[0] {
    notHeardPeople.insert(readLine()!)
}

for _ in 1...nm[1] {
    notSawPeople.insert(readLine()!)
}

if notHeardPeople.count > notSawPeople.count {
    for person in notHeardPeople {
        if notSawPeople.contains(person) {
            notHeardAndSawPeople.append(person)
        }
    }
} else {
    for person in notSawPeople {
        if notHeardPeople.contains(person) {
            notHeardAndSawPeople.append(person)
        }
    }
}

notHeardAndSawPeople.sort()

print(notHeardAndSawPeople.count)
for i in notHeardAndSawPeople {
    print(i)
}

- 듣지도 못한 사람과 보지도 못한 사람 그룹에 각각 입력값을 insert하고, 사람이 더 많은 그룹을 기준으로 삼아
  듣지도 못한 사람이 더 많다면, 그 사람들을 기준으로 보지도 못한 사람 그룹에 포함되어 있으면 듣보그룹에 추가하고
  보지도 못한 사람이 더 많다면, 그 사람들을 기준으로 듣지도 못한 사람 그룹에 포함되어 있으면 듣보그룹에 추가하는 방식을 사용

- 이후 사전순으로 출력하기 위해 sort를 하고, 듣보그룹의 count와 각각의 member를 출력하는 방식을 사용했다

- (작업이 많고 비효율적으로 보여 당연히 시간 초과가 날거라 생각하고 다른 방법을 찾아봐야지 했는데..)