[코드트리 챌린지] 6주차_배열 기록

martha·2023년 10월 16일

🖋️ 6주차 실력진단 결과



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

📁 6주차에 학습한 내용

🗝️ 악수와 전염병의 상관관계 2

문제 전개 과정

  • 처음에는 P번째 개발자만 감염이 되어 있는 상태
  • 그리고 감염된 개발자는 K번의 악수 동안 다른 개발자에게 전염병을 옮길 수 있음
  • 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:])))

📍 다음 주차 목표

  • dx, dy technque 완료하기
profile
KNOU Computer Science major

0개의 댓글