본문 바로가기

알고리즘

[구현] 백준 1380번 귀걸이 Python 풀이

728x90
반응형

문제 요약

교감 선생님은 학생들이 귀걸이를 하고 있으면 압수하고 학생의 숫자를 매겨 리스트를 작성한다.

압수한 귀걸이 뒤쪽에는 학생 번호와 'A' 또는 'B'를 함께 적어둔다.

수업이 종료되면 모두 돌려주는데, 하나를 잃어버려서 돌려주지 못한다.

귀걸이를 돌려받지 못한 학생의 이름을 출력하라.

 

👉 백준 1380번 문제 바로가기

입력

번호를 가진 시나리오로 구성. 1부터 순서대로 증가하고 각 시나리오는 아래 내용을 포함

  • 한 줄에 귀걸이 압수당한 학생 수 n (1 ≤ n ≤ 100) 입력
  • 다음 n줄 동안 학생 이름(최대 60자) 입력
  • 다음 2n - 1줄에 학생 번호와 'A' 또는 'B'가 공백을 사이에 두고 입력
    (번호는 교감 선생님의 학생 이름 리스트와 순서 일치)
  • 학생 번호는 최대 2번 등장. 두 번째 등장 시 첫 번째와 다른 알파벳이 적힘
    (첫 번째 등장은 압수, 두 번째 등장은 돌려받음을 의미)

마지막 줄에 0을 입력받으면 입력 종료

출력

시나리오 번호와 귀걸이를 돌려받지 못한 학생 이름을 공백으로 구분해 한 줄씩 출력

입출력 예시

입력 출력
3
Betty Boolean
Alison Addaway
Carrie Carryon
1 B
2 A
3 B
3 A
1 A
2
Helen Clark
Margaret Thatcher
1 B
2 B
2 A
0
1 Alison Addaway
2 Helen Clark

코드

정답

n = 1
result = []

while n:
  # 데이터 입력
  n = int(input())
  names = [input() for i in range(n)]
  values = []

  for i in range(2 * n - 1):
    a = int(input().split()[0])
    values.append(a)

  # 계산
  values.sort()
  for i in range(0, len(values), 2):
    if i == (len(values) - 1) or values[i] != values[i + 1]:
      result.append(names[values[i] - 1])
      break

# 출력
for i in range(len(result)):
  print(i+1, result[i])

학생 번호가 최대 2번만 등장한다고 해서, 뒤에 문자는 신경쓰지 않고 번호의 개수가 홀수인지 짝수인지만 봐도 구할 수 있을 것으로 판단. 입력 시 숫자만 저장한 리스트를 정렬해서 홀수인 숫자가 발견되면 result에 그 숫자에 해당하는 학생 이름을 저장한 뒤 빠져나오도록 했다. 

피드백

문제 읽고 이해/해석하는데 시간이 많이 걸렸다.

코드 짤 때 주석으로 어떤 기능(데이터 입력, 계산 등)을 넣을 지 먼저 나눠두고 짜니까 헷갈리지 않았다.

728x90
반응형