파이썬 SW문제해결 기본 - LIST 1
09 구간합(SW문제)
09. 구간합
🎲문제 : 위 이미지를 클릭하여 SWEA 이동 -> 9차시 1일차 - 구간합
🥾문제 접근:
- 중첩된 이중 반복문을 이용하여 '구간합'을 구하는 방법을 구상하였다.
EX) N=5, M=3, v=[1,2,3,4,5] 일 때,
🔄첫 번째 반복
1부터 3까지(M이 3이므로 123, 234, 345, 456, 567이기 때문에 3까지만 반복하는 것)
for i in range(N-M+1)
🔄두 번째 반복
i부터 M만큼 반복.
for j in range(i, i+M)
List란? - [SWEA]파이썬 SW문제해결 기본 - LIST 1 : 알고리즘, 리스트
🎯 문제 해결:
(최종 코드는 제일 하단 참고)
첫 번째 시도 - ✅PASS
T = int(input())
for test_case in range(1, T + 1):
#1
N, M = map(int, input().split(" "))
samples = input().split(" ")
temp = 0
#2
for i in range(M):
temp += int(samples[i])
max = temp
min = temp
#3
for i in range(1, N-M+1):
temp = 0
for j in range(i, i+M):
temp += int(samples[j])
if temp > max:
max = temp
if temp < min:
min = temp
#4
result = max-min
print(f"#{test_case} {result}")
#1
- N = 주어지는 정수의 개수(10≤N≤100), M = 구간합 범위(2≤M≤N) 을 'int'형으로 입력받았다.
📍map(function,iterable,...) : iterable(리스트, 튜플과 같은 반복자)의 모든 항목에 function을 적용하여 결과를 반환하는 함수이다.
- 주어진 모든 정수를 samples에 문자열 타입으로 입력받았다.( 위의 map() 함수를 이용하여 'int'형으로 변환하지 않은 것은 지난번 문제에서 큰 크기의 iterable을 변환하다가 메모리 에러가 발생한 경험이 있기 때문이다...😥(이번 문제에서는 최대 크기가 100이다.)
- temp = 0
최댓값, 최솟값을 계산하기 위해 임시로 구간합 값을 저장할 변수이다.
#2
첫 번째 요소에 대해 구간합(0~0+M)을 계산하여 최댓값(max) 최솟값(min)을 초기화하는 과정이다.
#3
두 번째 요소부터 이중 중첩 반복문을 통해 순회하며 각 구간합을 계산한다. 계산된 구간합(temp)은 바로 이전 최댓값(max), 최솟값(min)과의 비교 및 적용하고 다시 0으로 초기화된다.
#4
모든 요소에 대해 구간합을 수행하면 Max와 Min에는 전체 구간합에 대한 최댓값과 최솟값이 저장되게 된다. 문제에서 요구한 대로 최댓값-최솟값을 수행하여 출력한다.
이 코드의 결과는? - ✅PASS (실행 시간 : 0.14878s)
'SWEA() > Intermediate_Learn' 카테고리의 다른 글
[SWEA]파이썬 SW문제해결 기본 - LIST 2 : 2차원 List (2/2) (0) | 2021.11.10 |
---|---|
[SWEA]파이썬 SW문제해결 기본 - LIST 2 : 2차원 List (1/2) (0) | 2021.11.09 |
[SWEA]4834. 파이썬 SW문제해결 기본 - LIST 1 : 숫자 카드 (0) | 2021.11.01 |
[SWEA]4831. 파이썬 SW문제해결 기본 - LIST 1 : 전기버스 (0) | 2021.10.18 |
[SWEA]4828. 파이썬 SW문제해결 기본 - LIST 1 : min max (0) | 2021.10.17 |