문제
2017년에 이어, 2018년에도 카카오 코드 페스티벌이 개최된다!
카카오 코드 페스티벌에서 빠질 수 없는 것은 바로 상금이다. 2017년에 개최된 제1회 코드 페스티벌에서는, 본선 진출자 100명 중 21명에게 아래와 같은 기준으로 상금을 부여하였다.
2018년에 개최될 제2회 코드 페스티벌에서는 상금의 규모가 확대되어, 본선 진출자 64명 중 31명에게 아래와 같은 기준으로 상금을 부여할 예정이다.
제이지는 자신이 코드 페스티벌에 출전하여 받을 수 있을 상금이 얼마인지 궁금해졌다. 그는 자신이 두 번의 코드 페스티벌 본선 대회에서 얻을 수 있을 총 상금이 얼마인지 알아보기 위해, 상상력을 발휘하여 아래와 같은 가정을 하였다.
- 제1회 코드 페스티벌 본선에 진출하여 a등(1 ≤ a ≤ 100)등을 하였다. 단, 진출하지 못했다면 a = 0으로 둔다.
- 제2회 코드 페스티벌 본선에 진출하여 b등(1 ≤ b ≤ 64)등을 할 것이다. 단, 진출하지 못했다면 b = 0으로 둔다.
제이지는 이러한 가정에 따라, 자신이 받을 수 있는 총 상금이 얼마인지를 알고 싶어한다.
입력
첫 번째 줄에 제이지가 상상력을 발휘하여 가정한 횟수 T(1 ≤ T ≤ 1,000)가 주어진다.
다음 T개 줄에는 한 줄에 하나씩 제이지가 해본 가정에 대한 정보가 주어진다. 각 줄에는 두 개의 음이 아닌 정수 a(0 ≤ a ≤ 100)와 b(0 ≤ b ≤ 64)가 공백 하나를 사이로 두고 주어진다.
출력
각 가정이 성립할 때 제이지가 받을 상금을 원 단위의 정수로 한 줄에 하나씩 출력한다. 입력이 들어오는 순서대로 출력해야 한다.
예제 입력6
8 4 13 19 8 10 18 18 8 25 13 16 |
예제 출력1780000
620000 1140000 420000 820000 620000 |
풀이
다양한 풀이법이 있겠지만, 본인은 배열을 이용하여 풀이했다.
등수별로 상금을 담은 배열을 만들어, 입력받은 등수를 바로 출력한다.
import sys
input = sys.stdin.readline
prevFes,fes = [0],[0]
prevPrize,prize = (500,300,200,50,30,10),(512,256,128,64,32)
for i in range(6):
prevFes += [prevPrize[i] for _ in range(i+1)]
for i in range(5):
fes += [prize[i] for _ in range(2**i)]
for _ in range(int(input())):
a,b = map(int,input().split())
if a >= len(prevFes):
a = 0
if b >= len(fes):
b = 0
print((prevFes[a] + fes[b])*10000)
좀 더 Pythonic 하게 배열을 구성하자면 아래와 같다.
import sys
input = sys.stdin.readline
prevPrize,prize = (500,300,200,50,30,10),(512,256,128,64,32)
prevFes = [0] + [prevPrize[i] for i in range(6) for _ in range(i+1)]
fes = [0] + [prize[i] for i in range(5) for _ in range(2**i)]
for _ in range(int(input())):
a,b = map(int,input().split())
if a >= len(prevFes):
a = 0
if b >= len(fes):
b = 0
print((prevFes[a] + fes[b])*10000)
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[🥉2 / 백준 2744 / 파이썬] 대소문자 바꾸기 (0) | 2022.01.13 |
---|---|
[🥈4 / 백준 1244 / 파이썬] 스위치 켜고 끄기 (2) | 2022.01.10 |
[🥈4 / 백준 2331 / 파이썬] 반복수열 (0) | 2022.01.01 |
[🥉2 / 백준 1076 / 파이썬] 저항 (0) | 2021.12.31 |
[🥇4 / 백준 14499 / 파이썬] 주사위 굴리기 (0) | 2021.12.29 |