문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
t = int(input())
for test_case in range(1,t+1):
n = int(input())
num_list = list(map(int, input().split()))
start_idx = []
#수업이 있는 요일(인덱스)를 모두 찾는 for문
for i in range(len(num_list)):
if num_list[i] == 1:
start_idx.append(i)
ans = []
#수업이 있는 요일을 꺼내서 그 요일이 카운트의 시작점이 된다.
for idx in start_idx:
cnt = 0 #수업을 들은 횟수
days = 0 #총 며칠이 지났는지 카운트
while True:
if cnt == n: #만약 수업을 다 듣는다면, 반복문 탈출
break
if num_list[idx%7] == 1: #수업이 있는날이면
cnt += 1 #수업을 들은 횟수 += 1
idx += 1 #요일 += 1
days += 1 #총 며칠 지났는지 카운트 += 1
ans.append(days)
print("#{} {}".format(test_case, min(ans)))
피드백
단순한 문제인 줄 알았는데 꽤 오래걸렸다. 이 문제의 핵심은 일주일은 계속 반복된다는 것이다. 즉, 순환 리스트라는 것이다. 예를 들어 일주일 간의 수업 정보가 [1, 0, 0, 0, 1, 0, 1] 일 때, 수업이 열린 날(1) 부터 카운트를 해야 최소 일수를 구할 수 있다. 즉, 모든 수업이 열린 날을 찾아서 카운트해야한다. [1, 0, 0, 0, 1, 0, 1] 일 때, [1, 0, 1, 1, 0, 0, 0] 일 때, [1, 1, 0, 0, 0, 1, 0] 일 때를 다 살펴보고 최소 일수를 구하면 된다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 1873 상호의 배틀필드 (0) | 2023.05.16 |
---|---|
[SWEA/D3] 9280 진용이네 주차타워 (0) | 2023.05.16 |
[다시풀기] [SWEA/D3] 15612 체스판 위의 룩 위치 (0) | 2023.05.16 |
[SWEA/D3] 1208 [S/W 문제해결 기본] 1일차 - Flatten (0) | 2023.05.16 |
[다시풀기] [SWEA/D3] 1206 [S/W 문제해결 기본] 1일차 - View (0) | 2023.05.16 |