itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • binding
  • SWIFT
  • crud
  • CoreData
  • mongodb
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • AppleDevloperAcademy
  • 개발자
  • 세그멘테이션
  • 점주
  • SwiftUI
  • ios
  • 독립서점
  • 어플
  • 연결리스트
  • 생활코딩
  • CS
  • 킨디
  • nosql
  • POSTECH

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

[백준 - Swift] 19583 사이버 개강총회
PS

[백준 - Swift] 19583 사이버 개강총회

2023. 1. 24. 19:21

문제

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

 

19583번: 싸이버개강총회

첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는

www.acmicpc.net

 

 

풀이

입력값의 범위가 10^5 이하였다. 이중 반복문을 이용한다면, 시간이 초과될 가능성이 있었다. 따라서, 데이터 탐색, 추가의 시간복잡도가 O(1)인 딕셔너리를 이용해 풀었다. 

 

 1. 입력값을 time, nickname으로 나누어 튜플의 형태로 data 배열에 담아준다. (이때 시간순으로 들어온다)

 2. 만약 data 첫번째 원소의 time이 S보다 크다면, 0을 바로 반환해준다. 출석을 한 인원이 없다면, 뒤의 값을 확인할 필요도 없기 때문이다. S보다 크거나 작다는 가정에서 다음 과정을 진행한다.

 3. for문으로 data를 순회하면서,

 4. 만약 time이 S보다 작거나 같으면, 딕셔너리에 (닉네임 : 1) 값을 추가해준다.

 5. 만약 time이 E보다 크거나 같고, 딕셔너리에서 해당 닉네임의 값이 1이면, 값을 0으로 바꿔주고, ans에 1을 더해준다.

 6. ans를 출력한다.

 

 

코드

import Foundation

func solution() {
    let input = readLine()!.components(separatedBy: " ")
    let S = input[0], E = input[1], Q = input[2]
    var data = [(time: String, nickname: String)](), dict = [String:Int](), ans = 0

    while let chat = readLine() {
        data.append((chat.components(separatedBy: " ")[0], chat.components(separatedBy: " ")[1]))
    }

    if let first = data.first, first.time > S {
        print(0)
    } else {
        for chat in data {
            if chat.time <= S {
                dict[chat.nickname] = 1
            } else if chat.time >= E && dict[chat.nickname] == 1 {
                if chat.time <= Q {
                    dict[chat.nickname] = 0
                    ans += 1
                }
            }
        }
        print(ans)
    }
}
저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[Leetcode - Swift] 111. Minimum Depth of Binary Tree  (0) 2023.02.01
[Leetcode - Swift] 94. Binary Tree Inorder Traversal  (0) 2023.02.01
[백준 - Swift] 4358 생태학  (0) 2023.01.20
[백준 - Swift] 10799 쇠막대기  (0) 2023.01.19
[백준 - Swift] 1874 스택 수열  (0) 2023.01.19
    'PS' 카테고리의 다른 글
    • [Leetcode - Swift] 111. Minimum Depth of Binary Tree
    • [Leetcode - Swift] 94. Binary Tree Inorder Traversal
    • [백준 - Swift] 4358 생태학
    • [백준 - Swift] 10799 쇠막대기
    itisjustK
    itisjustK

    티스토리툴바