[SWEA] 13038. 교환학생

야금야금 공부·2023년 5월 20일
0

SWEA

목록 보기
43/43

13038. 교환학생

문제 풀이

각 1인 인덱스에서 시작한 일수를 계산한 후, 서로 비교해 최소 일수를 구한다.

t = int(input())

for i in range(1, t + 1):

    n = int(input())    # 목표 클래스수
    days = list(map(int, input().split()))

    onelist = []
    for a in range(len(days)):  # 1인 인덱스를 저장
        if days[a] == 1:
            onelist.append(a)

    daylist = []
    for start in onelist: # 각 1인 인덱스에서 시작해 작은 일수를 구함
        day, cnt = 0, 0    # 걸린 일수, 들은 클래스 수
    
        while cnt != n:   
            for a in range(start, 7):  # 먼저, 1인 인덱스에서 시작
                if days[a] == 1:
                    cnt += days[a]
                day += 1
                if cnt == n:   # 목표 클래스수에 도달하면 break
                    break
            start = 0    # 토요일(6)까지 목표 클래스수를 채우지 못했다면, 다시 일요일(0)부터 계산
        daylist.append(day)   # 목표 클래스수까지 걸린 일수를 추가

    print(f"#{i} {min(daylist)}")

간단해 보였는데 예상외로 바로 풀리진 않았다.
'무조건 일요일에서 시작하는 것이 아니다' 라는 것이 중요 포인트이다.
만약 1 0 0 0 0 0 1 이면, 토요일부터 시작해 최소 일수가 2일이어야 한다.

0개의 댓글