알고리즘

[백준, 파이썬, 1384번] 메시지

hminor 2024. 2. 13. 13:12

풀이

  • name과 check 2차원 배열을 만들어 둔 다음
  • 반복문을 통해 받아오는 입력 값 중
  • 첫 값은 name, 이 후의 값을 확인하여 인덱스 값을 추가한 다음
  • 다시 반복문을 순회하며 check에 추가된 인덱스 값에 맞게 
  • 출력문을 출력하며
  • state에 따른 출력문 또한 함께 출력
  • 예시에선 N으로 된 나쁜 말을 작성하는 친구가 한 명 뿐이지만 
  • 숨어있는 입력값으로는 더 많을 것으로 예상되어 아래와 같이 코드를 작성하여 해결

 

import sys
input = sys.stdin.readline

tc = 1
while True:
    n = int(input())
    if not n: break

    name = [""]*n
    check = [[0] for _ in range(n)]
    state = True

    for i in range(n):
        li = list(input().rstrip('\n').split())
        name[i] = li[0]
        for j in range(1,n):
            if li[j] == "N":
                if check[i][0] == 0: check[i][0] = j
                else: check[i].append(j)
                if state: state = False
   
    print("Group %d"%tc)
    for i in range(n):
        if check[i] != [0]:
            for j in check[i]:
                devil = name[i-j] if i-j >=0 else name[n+i-j]
                print("%s was nasty about %s"%(devil,name[i]))
   
    if state: print("Nobody was nasty")
    print()
    tc += 1