13038. 교환학생

기록하는 용도·2022년 5월 20일
0
  1. 내가 따질 시작의 요일이 무조건 월요일이 아니라는 사실을 알아야한다.
    화요일에 시작인지, 수요일에 시작인지에 따라 최소 일수를 구할 수 있다.

    요일마다 며칠이 걸리는지 append할 cnt_lst를 만들어두었다.
    먼저 가장 바깥에 시작 요일을 따지는 반복문을 작성한다.

  2. 요일의 정보 리스트가 1일때마다 카운팅해주는 cnt2,
    며칠이 걸리는지 카운팅해주는 cnt1이 있다.
    a와 b를 같게해주어 그 요일부터 시작할 수 있게끔 info[b]로 적어주었다.
    일요일이 넘어가 월요일로 다시 돌아갈 수 있도록 b==7때 b=0으로 해주었다.

  3. 그리고 그 중 최소값을 출력할 수 있도록 한다.

tc = int(input())

for i in range(tc):
    n = int(input())
    info = list(map(int, input().split()))
    cnt_lst = []

    for a in range(7):
        cnt2 = 0
        b = a
        cnt1 = 0
        while cnt2 < n:
            if info[b] == 1:
                cnt2+=1
            b+=1
            cnt1+=1
            if b == 7:
                b=0
        cnt_lst.append(cnt1)
    print("#{} {}".format(i+1,min(cnt_lst)))

문제에 딸려있는 3개의 테스트케이스만 보고 단순히 월요일부터 따지고 계속헤맸다.
심지어 댓글에 달려있는 반례에 대해서도 왜 틀린지 이해를 못했고,
결국 다른 사람의 문제 설명에 의해서 다시 풀게 되었다.

결론은
[0,1,0,0,1,1,1] 이라는 요일의 info 리스트가 있고 2일(n)이 주어진다면,
인덱스0부터 시작해서 cnt2가 2가될때까지 4일이 걸리는것이아니라
인덱스4부터 시작해서 고작 이틀만에 최소 일수를 채울 수 있기때문에 답은 2가 되는것이다.

0개의 댓글