카테고리 없음

[swea] 13038번: 교환학생 - 파이썬(python)

아뵹젼 2022. 11. 2.
T = int(input())
day = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]

for t in range(1, T+1):
    n = int(input())  # 들어야 하는 수업 개수
    arr = list(map(int, input().split()))
    course = [i for i in range(7) if arr[i] == 1]  # 수업이 열리는 날짜 인덱스
    num = len(course)  # 일주일에 열리는 수업 개수

    answer = int(1e9)
    for i in range(num):
        now = course[i]  # 시작 인덱스
        cnt = 0
        day = 0

        while cnt < n:
            if arr[now] == 1:  # 현재 날짜에 수업이 있다면
                cnt += 1
            day += 1  # 하루지남
            now += 1  # 인덱스 증가
            if now > 6:  # 인덱스가 7이라면
                now = 0  # 0으로 리셋
        answer = min(answer, day)

    print(f'#{t} {answer}')

 

계속 75%에서 실패하여서 애를 먹은 문제..

처음에 어떤 요일에서 시작할지를 고려하지 않았던 것이 문제였다!!!

 

따라서 모든 시작점을 고려하여, 날짜를 계산 후 그중 최솟값을 골랐다.

 

처음에는 while 문으로 모든 날짜를 1씩 증가하면서, 모든 경우에 대해 다 고려하는 것이 비효율적이라고 생각했다.

그래서 복잡도를 줄이려고 다른 방법을 찾다가 정신차려보니 몇시간동안 먼산으로 문제를 풀고 있었다.

여기에서 현타를 느끼고 그냥 fm 대로 풀기로 했다.

input 도 10^5면 그렇게 크지 않으니깐..

결국 중요한점은 코테 볼 때는 넘 딥하게 생각하지 말고, 그냥 정석대로 풀라는 것이다.

 

 

댓글