제로베이스 20220311
코딩테스트 연습
1. 밥
-
제주대 학생회관 식당에는 두 개의 메뉴가 있다. 코너 A로 가면 5,000원짜리 메뉴를 먹을 수 있고, 코너 B로 가면 1,000원짜리 메뉴를 먹을 수 있다.
- 준원이는 대면 수업이 시작되는 바람에 이제 남은 학기의 $N$일동안 매일 학식의 두 메뉴 중 정확히 하나를 골라서 먹어야 한다.
-
$N$일간의 두 메뉴는 이미 공지되어 있고, 준원이는 이미 모든 날의 각 메뉴가 얼마나 맛있을지 수치를 매겨 두었다.
-
준원이는 $N$일간 학식에 총 $X$원 이하를 써야 한다.
- 여러분이 $N$일간 준원이의 메뉴를 잘 골라서, 고른 메뉴의 맛의 합을 최대화 해주자!
입력
-
첫째 줄에는 두 정수 $N$, $X$가 주어진다.
-
둘째 줄부터 $N$개의 줄에, 각 날에 먹을 수 있는 5,000원짜리 메뉴의 맛 $A$와 1,000원짜리 메뉴의 맛 $B$가 공백을 사이에 두고 주어진다.
출력
- 준원이가 고른 메뉴들의 맛의 합을 최대화했을 때의 값을 출력하라.
풀이
# your code goes here
import sys
# 첫째 줄에는 두 정수 N, X가 주어진다.
# 둘째 줄부터 N개의 줄에,
# 각 날에 먹을 수 있는 5,000원짜리 메뉴의 맛 A와 1,000원짜리 메뉴의 맛 B가 공백을 사이에 두고 주어진다.
N, X = list(map(int,sys.stdin.readline().split()))
A = []
B = []
val_diff = []
val_idx = []
for i in range(0,N):
a, b = list(map(int,sys.stdin.readline().split()))
A.append(a)
B.append(b)
val_diff.append(a-b)
val_idx.append(i)
for j in range(0,len(val_diff)-1):
if val_diff[i] > val_diff[j]:
tmp = val_diff[i]
tmp2 = val_idx[i]
val_diff[i] = val_diff[j]
val_idx[i] = val_idx[j]
val_diff[j] = tmp
val_idx[j] = tmp2
# 매일 밥을 먹긴 해야하므로, 가치가 큰쪽을 무조건 선택.
# 단, 예산이 오버되었을 경우에 한해 5000원짜리 선택들중 가치가 가장 낮은쪽을 1000원짜리 메뉴로 변경.
max = []
for i in range(0,N):
if val_diff[i] > 0 and X > 5000:
X -= 5000
max.append(A[val_idx[i]])
elif val_diff[i] > 0 and X < 5000:
X -= 1000
max.append(B[val_idx[i]])
elif val_diff[i] < 0:
X -= 1000
max.append(B[val_idx[i]])
print(sum(max))
채점 결과
- 오답(시간 초과)