BoJ 9979 - Does This Make Me Look Fat? [with Python / 문제 한국어로 번역]

ssook·2023년 9월 27일
0

BoJ 문제기록

목록 보기
18/29
post-thumbnail

📍 문제

당신은 인기 있는 주간 텔레비전 토크 쇼의 호스트로서, 다가올 다이어트 에피소드의 세부 사항에 대해 작업 중입니다.
게스트로는 최근 핫한 다이어트 프로그램인 "다이어트 하고 싶나요?"를 자체 기획한 Dr. Kevorkian을 초대할 예정입니다. 이 프로그램은 매일 체중을 1 파운드 감소시키는 것을 보장하고 있습니다!

당신은 다이어트를 진행 중인 여러 다이어터를 쇼에 초대하기로 예정되어 있는데, 이 참가자들 모두가 Dr. Kevorkian의 프로그램에 참여하고 있습니다. 당신은 쇼를 더 가시적으로 만들기 위해 쇼에 출연하는 다이어터들을 그들의 다이어트 시작 체중을 내림차 순 기준으로 소개하려고 합니다.
문제는 그들이 작성한 양식에서는 아래와 같은 정보만을 담고있다는 것입니다: 이름, 다이어트 진행 일수, 다이어트 시작 체중.
당신은 오늘 밤 촬영 시간까지 이 정보들을 계산해야 합니다. 간만에 쓰지 않았던 수학 기술을 활용해야 하겠군요!

입력

입력은 최대 100개의 데이터 세트로 구성됩니다.
각 데이터 세트는 다음 설명에 따라 구조화되며 데이터 세트 사이에 공백인 줄은 없을 것입니다.

하나의 데이터 세트는 다음과 같은 구성 요소로 이루어집니다.
1. 시작 라인 - 단일 라인으로 "START"가 있습니다.
2-1. 다이어터 목록 - 1에서 10(포함)개의 단일 라인으로 구성되며, 각 라인은 세 개의 필드로 구성되며 각 필드는 공백 하나로 구분됩니다.
2-2. 이름 - 다이어터의 이름입니다. 이것은 1에서 20(포함)개의 알파벳과 숫자로 이루어진 텍스트 문자열입니다(공백 없음).
다이어트 진행 일수 - 다이어터가 토크 쇼 당일까지 "Do You Want To Diet" 다이어트를 진행한 일수입니다. 이 값은 1에서 1000 미만의 양의 정수여야 합니다.
2-3. 시작 체중 - 다이어트를 시작하기 직전의 체중(파운드)입니다. 이 값은 1에서 10,000 미만의 양의 정수여야 합니다.
3. 종료 라인 - 단일 라인으로 "END"가 있습니다. 다음은 유용할 수 있는 몇 가지 사실입니다:

모든 다이어터는 광고대로 다이어트 중일 동안 매일 정확히 1 파운드씩 체중을 감량했습니다.
아무도 쇼 당일에 1 파운드보다 적게 나가지 않도록 다이어트를 오래 유지하지 않았습니다.
주어진 입력 세트의 모든 다이어터는 쇼 당일에 서로 다른 체중을 가졌습니다.
주어진 입력 세트의 모든 다이어터는 서로 다른 이름을 가졌습니다.

출력

각 입력 데이터 세트에 대해 정확히 하나의 출력 세트가 있으며,
출력 세트 사이에는 정확히 하나의 공백 라인이 있을 것입니다.

하나의 출력 세트는 각각 다이어터 목록에서 하나의 다이어터의 이름을 포함하는 여러 줄로 구성됩니다.
이 목록은 텔레비전 쇼 방송 당시의 체중을 기준으로 내림차순으로 정렬됩니다. 모든 다이어터가 목록에 포함되어야 합니다.

📍 아이디어

그냥 start, end일 때를 제외하고 사용자 입력 값을 받아서 딕셔너리에 저장한 다음 정렬하여 순서대로 출력하면 되는 아주 간단한 문제!

나의 경우 쓸데없이 중첩 반복문을 써서 시간초과를 처음에 띄우기는 했지만...

그래도 로직 자체는 굉장히 간단한 문제이다.

📍 제출코드


import sys

while True:
  s = sys.stdin.readline().rstrip()
  if not s:
    break

  if s == 'START':
    lose = {}

  elif s != 'END':
    name, start, end = map(str, s.split())
    start = int(start)
    end = int(end)
    lose[name] = end-start

  elif s == 'END':
    lose = sorted(lose.items(), key = lambda x:-x[1])
    for name in lose:
      print(name[0])
      if name == lose[-1]:
        print('')
        
profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글