https://www.acmicpc.net/problem/13717
13717번: 포켓몬 GO
첫 번째 예제에서 지우가 어떻게 뿔충이(Weedle)를 진화시켰는지 보자. 처음 진화를 위해 지우는 12개의 사탕을 사용하였지만 2개를 돌려받아 32개의 사탕이 남는다 (42-12+2). 두 번째 진화 후엔 22
www.acmicpc.net
문제
모바일 게임을 즐겨 하는 지우는 Jetpack Joyride 에 금새 질렸고 포켓몬 GO를 시작했다! 이 게임의 재미있는 점은 포켓몬을 진화시킬 수 있다는 것이다. 지우가 Pi 라는 포켓몬을 진화시키기 위해서는 해당 포켓몬의 Ki 개의 사탕이 필요하다. 진화가 된 후에는 2개의 사탕을 돌려받는다. 각 포켓몬은 그들 종의 사탕으로만 진화할 수 있다. 지우는 N종의 포켓몬이 있고 Pi 라는 포켓몬의 사탕은 Mi 개를 가지고 있으며 지우는 진화시킬 수 있는 포켓몬의 총 마리수를 궁금해한다. 또한, 지우는 가장 많이 진화시킬 수 있는 포켓몬이 무엇인지 알고 싶어한다. 만약 그런 포켓몬들이 여러 종이 있다면 도감번호가 가장 작은 포켓몬을 출력한다. 즉, 입력 데이터에서 더 먼저 나타나는 포켓몬을 출력하면 된다.
입력
첫 번째 줄에는 포켓몬의 종류 수를 나타내는 N (1 ≤ N ≤ 70)이 주어진다.
그 다음 2N 줄에는 N개의 데이터 세트가 입력되는데
- 2i 번째 줄에는 i번째 포켓몬의 이름을 나타내는 최대길이 20의 Pi 문자열이 주어진다.
- 2i + 1 번째 줄에는 Ki (12 ≤ Ki ≤ 400) , Mi (1 ≤ Mi ≤ 104) 가 주어지는데 각각 i 번째 포켓몬이 진화에 필요한 사탕의 수와 지우가 가지고 있는 i 번째 포켓몬의 총 사탕의 수이다.
출력
첫 번째 줄엔 진화시킬 수 있는 포켓몬의 총 마리수를 출력한다.
두 번째 줄엔 가장 많이 진화시킬 수 있는 포켓몬의 이름을 출력한다.
풀이
가장 많은 진화를 이뤄낸 포켓몬의 이름과 수를 저장할 리스트를 만들어주었으며, 최댓값이 여러 개가 나올 경우 우선으로 입력된 포켓몬을 출력하기에 인덱스에 -1을 곱해서 저장해주었습니다.
코드
# 13717번 포켓몬 GO
n = int(input())
li = []
# 진화된 모든 포켓몬의 수
alltotal = 0
for i in range(n):
# 포켓몬의 이름
name = input()
evol, candy = map(int, input().split())
# 캔디를 사용할 수 없을 때까지 진화할 동안 입력된 포켓몬의 진화 수를 저장하는 변수
total = 0
while evol <= candy:
upgrade_pocketmon = (candy // evol)
candy %= evol
candy += (upgrade_pocketmon) * 2
total += upgrade_pocketmon
alltotal += total
# 인덱스에 -1을 곱해서 sort()에서 우선 입력된 포켓몬이 리스트 맨 앞으로 오게 만듬
li.append([total, -i, name])
li.sort(reverse=True)
print(alltotal)
print(li[0][2])
출력결과
'백준 > 구현' 카테고리의 다른 글
[백준][Python] 1972번 놀라운 문자열 - 실버 3 (0) | 2024.05.16 |
---|---|
[백준][Python] 14503번 로봇 청소기 - 코팩(지문 오류 존재) (2) | 2024.01.04 |
[백준][Python] 2493번 탑 - 코팩 (0) | 2024.01.02 |
[백준][PyPy3] 1062번 가르침 - 코팩 (0) | 2023.08.31 |
[백준][Python] 2776번 암기왕 - 코팩 (0) | 2023.08.30 |