만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

투자한 돈

면접 대비

시간 제한0.1초메모리 제한1024 MB

요약
오늘의 요일과 각 예금이 생성된 뒤 지난 일수가 주어질 때, 주말에는 갱신되지 않는 규칙을 적용해 가장 빨리 돌아오는 갱신일까지 기다려야 하는 일수를 구합니다.
난이도

쉬움10점 중 3점

유형
구현, 수학
정답자
아직 제출이 없습니다

문제

요즘 당신의 프로그래밍 실력은 대단해서, 일을 할 때마다 많은 돈을 받습니다. 하지만 재테크 실력은 그만큼 늘지 않았습니다. 그래서 돈을 벌 때마다 자동 갱신이 되는 30일짜리 정기예금으로 은행에 넣어 둡니다. 예금을 넣은 뒤 30일이 지나면 같은 기간인 30일 동안 다시 예치되고, 은행에 갱신 중지와 반환을 요청할 때까지 이 과정이 반복됩니다.

정기예금은 주말에 만들거나 갱신할 수 없습니다. 30일이 주말에 끝나면 갱신은 바로 다음 월요일에 이루어집니다.

오늘이 토요일이고 정기예금을 다섯 개 만들었다고 해 봅시다. 지난주 월요일에 하나, 지난주 화요일에 하나, 지난주 수요일에 하나, 어제 두 개를 만들었습니다. 월요일 예금은 오늘부터 25일 뒤인 수요일에 갱신됩니다. 화요일 예금은 26일 뒤 목요일, 수요일 예금은 27일 뒤 금요일에 갱신됩니다. 금요일에 만든 두 예금은 30일 뒤인 일요일에 갱신되어야 하지만 일요일 갱신은 허용되지 않으므로 월요일에 갱신됩니다. 이 경우 은행에서 돈을 받으려면 25일을 기다려야 합니다.

은행이 돈의 대부분을 보관하고 있으므로, 일상적인 식비 외에 무언가를 사려면 가장 가까운 갱신일까지 기다려야 합니다. 오늘 당신은 6개월 된 기기를 대신할 새 스마트폰을 사기로 했습니다. 각 예금을 만든 날이 주어질 때, 은행에서 돈을 받기 위해 기다려야 하는 최소 일수를 구하세요.

입력

첫째 줄에 오늘의 요일을 나타내는 문자열 T와 정기예금의 개수 N(1≤N≤1051 \le N \le 10^5)이 주어집니다. T는 "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" 중 하나이며, 각각 월요일부터 일요일을 뜻합니다.

둘째 줄에는 각 정기예금을 만든 뒤 지난 일수 D1, D2, ..., DN (0≤Di≤1090 \le D_i \le 10^9)이 주어집니다. 정기예금은 주말에 만들어지지 않았습니다.

출력

은행에서 돈을 받기 위해 기다려야 하는 최소 일수를 정수 하나로 출력합니다.

예제5

  1. 예제 1

    입력
    Sat 5
    5 4 3 1 1
    
    예상 출력
    25
    
  2. 예제 2

    입력
    Sat 5
    3 1 4 1 5
    
    예상 출력
    25
    
  3. 예제 3

    입력
    Thu 1
    0
    
    예상 출력
    32
    
  4. 예제 4

    입력
    Thu 1
    30
    
    예상 출력
    0
    
  5. 예제 5

    입력
    Fri 1
    31
    
    예상 출력
    31