📜 문제 설명
영선회사는 야근이 매우 잦은 회사이다. 다행히도 야근수당을 챙겨 주기는 하는데, 사장 nein은 매우 악덕한 사장이기 때문에 최대한 야근 수당을 안 챙겨주려 한다.
영선회사의 야근인지 확인하는 방법은 다음과 같다. 매우 이른 아침부터 퇴근시간까지 출입기록이 주어진다. 만약, 들어간 기록은 없는데, 나온 기록이 있다면 회사에서 야근을 한 것으로 기록된다. 또한 회사에 들어갔는데, 퇴근시간까지 나오지 않는다면, 이 또한 야근을 하는 것으로 기록된다. 출입기록에 따라서 두 기준 다 만족할 수도 있는데, 이는 야근을 두 번 한 것으로 인정된다. 하지만, 회사에 계속 있었지만 나오거나 들어가지를 않아 출입기록이 없다면 야근을 한 것으로 인정하지 않는다.
그리고 이 출입기록에는 치명적인 단점이 있는데, 동명이인을 구별하지 못한다는 것이다. 이름이 같은 경우, 같은 사람으로 인식하며, 둘 다 회사에 남아있거나 들어간 기록 없이 나온 기록이 있는 식으로, 명확히 보이는 경우에만 복수로 야근이 인정된다.
영선회사의 오늘의 출입기록이 주어진다. 이 기록을 바탕으로 모든 직원의 야근 횟수의 합을 출력하시오.
입력
첫째 줄에는 출입기록의 개수 q가 주어진다.( 1≤q≤100,000)
다음 q줄에는 이름 s와 들어간 지 나간 지에 대한 정보 p가 주어지는데, p는 ‘+’일 때 들어간 것이고, ‘-‘일 때 나간 것이다. 이름의 길이는 30자를 넘지 않는다. 이름은 소문자로만 이루어져 있다.
출력
출입기록을 바탕으로 모든 직원의 야근 횟수의 합을 출력하시오.
입출력 예시
input | result |
7 | 5 |
nein + | |
nein - | |
nein - | |
nein - | |
nein + | |
nein + |
💡 문제 풀이
처음에는 회사에 들어간 이름을 스택으로 관리하려다가 동명이인을 해결할 수 가 없을 거 같아서 딕셔너리로 방법을 바꿨다.
아래와 같은 경우의 수로 문제를 해결했다.
1. 출근O
- 딕셔너리에 key는 이름, value는 동명이인 수
2. 출근O 퇴근O
- 딕셔너리의 해당 이름의 값 -1
3. 출근X 퇴근O
- 무조건 야근 (count 증가)
4. 출근O 퇴근X
- 딕셔너리에 존재함(무조건 야근)
import sys
input = sys.stdin.readline
q = int(input())
dic = {}
count =0
for _ in range(q):
info = list(input().split())
name, data = info[0], info[1]
if data == '-':
if name not in dic or dic[name] == 0: #3
count +=1
elif name in dic: #2
dic[name] -=1
else: #1
if name not in dic:
dic[name] = 1
else:
dic[name] += 1
#야근하는 총 직원 수
if len(dic) == 0:
print(count)
else:
print(sum(dic.values()) + count)
📝 후기
실버4라서 그런가 어렵지 않았다. 다음에는 실버3 난이도 문제를 풀어야지!💪
https://www.acmicpc.net/problem/14402
14402번: 야근
영선회사는 야근이 매우 잦은 회사이다. 다행히도 야근수당을 챙겨 주기는 하는데, 사장 nein은 매우 악덕한 사장이기 때문에 최대한 야근 수당을 안 챙겨주려 한다. 영선회사이 야근인지 확인하
www.acmicpc.net
'코딩테스트 > 구현' 카테고리의 다른 글
[PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2025.07.17 |
---|---|
[완전탐색] 마인크래프트(18111) (0) | 2025.02.12 |
[구현] 로봇 청소기 (14503) (0) | 2021.11.16 |
[구현] 빗물 (14719) (0) | 2021.11.10 |
[Lv.2] 이진 변환 반복하기 (0) | 2021.08.27 |