알고리즘/구현
[백준 19583] 싸이버 개강 총회 -구현, 문자열, HashSet
제이G
2023. 2. 7. 09:51
https://www.acmicpc.net/problem/19583
19583번: 싸이버개강총회
첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는
www.acmicpc.net
[설계]
1. (00:00 ~ S) in HashSet에 입장체크를 한다.
2. (E ~ Q) out HashSet에 퇴장체크를 한다.
3. 입장한 사람들에 대해 퇴장했는지 확인한다.
시간복잡도: O(채팅기록) = O(100,000)
※주의: (E ~ Q)입력에 대해 입장체크 in의 존재여부로 바로 확인하면 안된다. (채팅 중복이 있기 때문)
[알게된 내용]
String.compareTo()
- 두개의 String을 사전적으로 비교한다.
- Strings에 각 Character의 Unicode를 기반으로 비교한다.
- 매개변수인 String보다 사전적으로 앞서있는 경우 -> 음수
- 매개변수인 String보다 사전적으로 뒤에 있는 경우 -> 양수
- 매개변수인 String과 사전적으로 동일한 경우 -> 0
(compareTo가 0을 리턴하고, equals가 true을 리턴하는 경우)
사전순의 정의
- 두 String이 다르다 -> 동일한 index의 character이 서로 다른 경우, 길이가 다른경우
- 동일한 index의 character가 서로 다른 경우, 두 character의 Unicode의 차이로 비교
this.charAt(index) - argumentString.charAt(index) - 동일한 index에 대한 비교가 불가한 경우, 두 String의 길이로 비교
this.length() - argumentString.length()
정리
- 두 String이 동일한 경우 0을 리턴
- 기본적으로는, 동일한 index의 character의 unicode를 바탕으로 비교
this.charAt(index) - argumentString.charAt(index)
this의 특정 문자가 더 앞에있으면 사전적으로 앞서 있다. - [abc], [abc9]와 같이, 동일한 index의 character 비교가 불가한 경우 길이를 바탕으로 비교
this.length() - argumentString.length()
this의 길이가 짧으면 사전적으로 앞서 있다. - 위의 사전순 비교를 통해, stringA.compareTo(stringB)의 결과가
음수이면 -> stringA가 사전적으로 앞서 있다.
양수이면 -> stringA가 사전적으로 뒤에 있다.
0이면 -> stringA가 사전적으로 같다.