SWEA()/Intermediate_Learn

[SWEA]4835. 파이썬 SW문제해결 기본 - LIST 1 : 구간합

코딩의행복 2021. 11. 3. 22:00

파이썬 SW문제해결 기본 - LIST 1

09 구간합(SW문제)


이미지를 클릭하시면 SW Expert Academy의 해당 강좌로 이동합니다

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 : 알고리즘, 리스트

 

[SWEA]파이썬 SW문제해결 기본 - LIST 1 : 알고리즘, 리스트

파이썬 SW문제해결 기본 - LIST 1 01 알고리즘 02 리스트 01. 알고리즘 ① 알고리즘 개요 ▣ 알고리즘이란? - 유한한 단계를 통해 문제를 해결하기 위한 절차나 방법 ▣ 알고리즘 표현법 - 슈도 코드 :

taewow.tistory.com


🎯 문제 해결:
(최종 코드는 제일 하단 참고)


첫 번째 시도 - ✅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
모든 요소에 대해 구간합을 수행하면 MaxMin에는 전체 구간합에 대한 최댓값과 최솟값이 저장되게 된다. 문제에서 요구한 대로 최댓값-최솟값을 수행하여 출력한다.

이 코드의 결과는? - ✅PASS (실행 시간 : 0.14878s)