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

 

14653번: 너의 이름은

첫째 줄에 OAKAK TALK방에 있는 사람 수 N과 총 메시지의 개수 K, 정보를 알고 싶은 메시지의 번호 Q가 주어진다. (1 ≤ N ≤ 26, 1 ≤ K ≤ 10,000, 1 ≤ Q ≤ K) 둘째 줄부터 K개의 줄에 걸쳐 메시지를 읽지

www.acmicpc.net

 


풀이 과정


  1. 문제를 풀면서 고려해야 할 점이 좀 있음..
    1. Q 위치 이후에 채팅을 친 사람들은 무조건 읽은 사람
    2. Q 위치 이전에 채팅을 친 사람들 중 Q 위치에서 읽은 사람과 읽지 않은 인원이 같은 경우에도 해당 사람 또한 읽은 사람이라고 볼 수 있다.
  2. 두가지 케이스에 맞추어서 정답 출력을 하면 된다. 단, 읽지 않은 사람의 수가 0인 경우에는 -1을 출력해준다.
    • 여기서 읽지 않은 사람의 카운트를 입력받은걸로 하지 않고.. 정답 리스트의 길이가 0인 경우로 했다가 오답처리가 계속 나왔다.. 

소스 코드


 

import sys

input = lambda: sys.stdin.readline().rstrip()

N, K, Q = map(int, input().split())
people = set([chr(ch) for ch in range(ord('A'), ord('A')+N)])
people.remove('A')
messages = [[0, 0]] + [input().split() for _ in range(K)]

for i in range(Q, len(messages)):
    if messages[i][1] in people:
        people.remove(messages[i][1])

for i in range(Q-1, 0, -1):
    if messages[i][0] == messages[Q][0]:
        if messages[i][1] in people:
            people.remove(messages[i][1])
    else:
        break

people_list = sorted(list(people))
if messages[Q][0] == '0':
    print(-1)
else:
    print(*people_list)

+ Recent posts