

방송대 과제 떄문에(심지어 추가제출 기간 다 끝나가는데 겨우겨우 제출) 하나도 못 하다가 6주차 마감 다 되어서야 부랴부랴 실력진단을 했고.. 챗GPT를 통한 학습의 위력을 실감하는 중임. 이제 유료 버전 결제도 했겠다 챗GPT 이용해서 열심히 알고리즘 공부해야겠다.

P번째 개발자만 감염이 되어 있는 상태t초에 x개발자와 y개발자가 악수를 했다면, 둘 중에 하나라도 감염된 개발자가 있고 그 개발자의 남은 전염 가능한 악수 횟수가 0보다 크다면, 다른 개발자도 감염됨# 입력 받기
N, K, P, T = map(int, input().split())
handshakes = [list(map(int, input().split())) for _ in range(T)]
# 각 개발자의 감염 여부와 남은 전염 가능한 악수 횟수를 저장하는 리스트 초기화
infected = [0] * (N+1) # 0번째 인덱스는 사용하지 않음
remain_transmission = [0] * (N+1)
# P번째 개발자만 초기에 감염
infected[P] = 1
remain_transmission[P] = K
# 모든 악수 정보에 대해 확인
for t, x, y in sorted(handshakes, key=lambda x: x[0]): # 시간순으로 악수 정보 확인
# x나 y가 감염되어 있고, 전염 가능한 악수 횟수가 남아 있다면
if (infected[x] and remain_transmission[x] > 0) or (infected[y] and remain_transmission[y] > 0):
infected[x] = infected[y] = 1
if remain_transmission[x] > 0:
remain_transmission[x] -= 1
if remain_transmission[y] > 0:
remain_transmission[y] -= 1
print("".join(map(str, infected[1:])))

위의 코드에서는 한 번 감염된 개발자의 remain_transmission 값을 재설정하지 않기 때문에, 한 개발자가 다른 개발자에게 전염된 후 해당 개발자의 remain_transmission 값이 처음 감염 당시의 값과 동일하게 유지된다. 그러므로 새롭게 감염된 개발자의 remain_transmission 값을 K로 재설정할 필요가 있다.
# 입력 받기
N, K, P, T = map(int, input().split())
handshakes = [list(map(int, input().split())) for _ in range(T)]
# 각 개발자의 감염 여부와 남은 전염 가능한 악수 횟수를 저장하는 리스트 초기화
infected = [0] * (N+1) # 0번째 인덱스는 사용하지 않음
remain_transmission = [0] * (N+1)
# P번째 개발자만 초기에 감염
infected[P] = 1
remain_transmission[P] = K
# 모든 악수 정보에 대해 확인
for t, x, y in sorted(handshakes, key=lambda x: x[0]): # 시간순으로 악수 정보 확인
# x나 y가 감염되어 있고, 전염 가능한 악수 횟수가 남아 있다면
if (infected[x] and remain_transmission[x] > 0) or (infected[y] and remain_transmission[y] > 0):
if not infected[x]: # x가 감염되지 않았다면
infected[x] = 1
remain_transmission[x] = K
else:
remain_transmission[x] -= 1
if not infected[y]: # y가 감염되지 않았다면
infected[y] = 1
remain_transmission[y] = K
else:
remain_transmission[y] -= 1
print("".join(map(str, infected[1:])))