:link:문제 링크

[31869 선배님 밥 사주세요!]

:question:문제 설명

선배들이 밥을 사주기로 한 날짜(몇주차, 무슨요일)이 주어지고 선배가 가지고 있는돈과 밥 약속에 드는 비용이 주어질 때, 최대 며칠동안 밥을 얻어먹을 수 있는지 구하는 문제

:pencil2:코드

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)

:memo:풀이

1주차부터 10주차까지 범위가 한정되어있어서 몇주차 무슨요일에 밥을 먹을 수 있는지 체크하는 2차원 배열을 만들었다. 배열을 앞에서부터 체크하면서 연속적으로 밥을 먹을 수 있는 최대 일수를 구해주었다! 처음에는 정보를 받아서 정렬 후에 순차적으로 확인했는데 조건분기가 은근 까다로운 것 같아서 범위가 작은 점을 이용해서 풀이했다.

10년전 생각이 나는 문제였다..다들 잘 살고있을까..?

댓글남기기