백준 #31869 선배님 밥 사주세요!
문제 링크
문제 설명
선배들이 밥을 사주기로 한 날짜(몇주차, 무슨요일)이 주어지고 선배가 가지고 있는돈과 밥 약속에 드는 비용이 주어질 때, 최대 며칠동안 밥을 얻어먹을 수 있는지 구하는 문제
코드
import sys
input = sys.stdin.readline
from collections import defaultdict
N = int(input())
arr = [list(input().rstrip().split()) for _ in range(N)]
visited = [[False] * 7 for _ in range(11)]
dict = defaultdict(int)
for _ in range(N):
name, money = input().rstrip().split()
dict[name] = int(money)
for i in range(N):
name, w, d, p = arr[i][0], int(arr[i][1]), int(arr[i][2]), int(arr[i][3])
if dict[name] >= p:
visited[w][d] = True
cnt = 0
max_cnt = 0
for i in range(1, 11):
for j in range(7):
if visited[i][j]:
if j == 0:
if visited[i - 1][6]:
cnt += 1
else:
cnt = 1
else:
if visited[i][j - 1]:
cnt += 1
else:
cnt = 1
else:
cnt = 0
if max_cnt < cnt:
max_cnt = cnt
print(max_cnt)
풀이
1주차부터 10주차까지 범위가 한정되어있어서 몇주차 무슨요일에 밥을 먹을 수 있는지 체크하는 2차원 배열을 만들었다. 배열을 앞에서부터 체크하면서 연속적으로 밥을 먹을 수 있는 최대 일수를 구해주었다! 처음에는 정보를 받아서 정렬 후에 순차적으로 확인했는데 조건분기가 은근 까다로운 것 같아서 범위가 작은 점을 이용해서 풀이했다.
10년전 생각이 나는 문제였다..다들 잘 살고있을까..?
댓글남기기