Where who wants to meet someone

백준 Swift [7785] 회사에 있는 사람 본문

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

백준 Swift [7785] 회사에 있는 사람

Lust3r 2023. 8. 8. 15:10
728x90

난이도

실버 V

 

문제

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

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net

 

내 답안

var companyLog = [String : String]()

for _ in 1...Int(readLine()!)! {
    let input = readLine()!.split(separator: " ").map { String($0) }

    companyLog.updateValue(input[1], forKey: input[0])
}

print(companyLog.filter { $0.value == "enter" }.map { $0.key }.sorted(by: >).joined(separator: "\n"))
  • 처음에는 구조체를 사용해야 하나 했었는데, dictionary로 해서 각 사람마다 update를 해주면 되겠다 하는 생각에 다다랐다.
  • 로그의 수만큼 for문을 돌며 입력받은 값을 통해 이름을 key, 상태를 value로 하여 updateValue를 해준다
  • 이후는 다음의 과정을 따른다
    • 1. companyLog에 filter 메서드를 사용하여 value가 "enter"인(퇴근을 하지 않은) 직원을 찾는다
    • 2. map을 통해 value가 "enter"인 직원의 key값만 뽑는다
    • 3. sorted(by: >)를 사용하여 사전의 역순으로 정렬한다
    • 4. joined(separator: "\n")을 사용하여 각 직원의 이름을 한 줄 띄우는 형식으로 출력