https://www.acmicpc.net/problem/1384
1384번: 메시지
그룹 번호를 "Group 1"과 같이 출력함으로써 출력을 시작합니다. 그 다음 줄부터 누가(A) 누구(B)에게 나쁜 말을 했는지 "A was nasty about B"로 한 줄씩 출력합니다. 나쁜 말이 여러 개라면, 입력받은 순
www.acmicpc.net
22/09/16
맨 처음에 예제가 이해가 잘 가지 않았던 문제로, 게시판을 보고 이해할 수 있었다.
이 문제를 보고 앞으론 문제의 지문을 잘 읽어야겠다는 생각을 하게 되었다....
문제 접근 방식:
누가 누구에게 나쁜말을 했는지 순서대로 출력하면 되는 문제이다.
예제를 보면 이해가 쉬운데, 예제 입력과 출력을 보자.
Ann P N P P
Bob P P P P
Clive P P P P
Debby P N P P
Eunice P P P P
Debby was nasty about Ann
Bob was nasty about Debby
Ann에서 N은 두번째에 위치해있으므로, 인덱스가 뒤로 두 칸 간 Debby가 나쁜 말을 했다고 할 수 있다.
마찬가지로 Debby에서 N은 두번째에 위치해있으므로, 인덱스가 뒤로 두 칸 간 Bob이 나쁜 말을 했다고 할 수 있다.
이를 이용하여 각 줄을 리스트로 입력 받고, 이 줄들을 모두 포함하는 messages라는 리스트를 제작하여 구현하였다.
우리는 messages의 각 원소를 처음부터 돌면서 만약 나쁜 말을 했으면(원소에 N이 있으면) 예제에서 봤던 규칙처럼 인덱스를 빼서 출력해주면 된다.
그리고 나쁜말을 아무도 하지 않았다는 플래그를 세워주었다.(nobody was nasty를 출력하기 위해)
아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.
# 1384번 메시지
# 구현, 문자열
group = 1
while True:
n = int(input())
if n == 0:
break
messages = []
for _ in range(n):
message = input().split()
messages.append(message)
print(f'Group {group}')
flag = True
for i in range(n):
if 'N' in messages[i][1:]:
flag = False
for j in range(1, n):
if messages[i][j] == 'N':
print(f'{messages[i-j][0]} was nasty about {messages[i][0]}')
if flag:
print('Nobody was nasty')
print()
group += 1
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[Python] 1417번 국회의원 선거 (0) | 2022.10.11 |
---|---|
[Python] 1402번 아무래도이문제는A번난이도인것같다 (0) | 2022.09.29 |
[Python] 1380번 귀걸이 (0) | 2022.09.29 |
[Python] 1340번 연도 진행바 (0) | 2022.09.29 |
[Python] 18155번 Issuing Plates (0) | 2022.09.29 |