본문 바로가기
Algorithm Problem Solving/SW Expert Academy

[Python] SW Expert Academy - 4835. 구간합

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 7. 21.
728x90
반응형

SW Expert Academy 4835번 구간합 문제는 N개의 정수가 들어있는 배열에서 이웃한 M개의 합이 가장 큰 경우와 가장 작은 경우를 구하고 그 차이를 출력하는 문제이다. 리스트 자료구조에 관한 문제이며 난이도는 D2이다.

SW Expert Academy 4835번 구간합 문제 정보

자료구조 분류

리스트

난이도

D2

구간합 문제 요약

  • N개의 정수가 들어있는 배열에서 이웃한 M개의 합이 가장 큰 경우와 가장 작은 경우의 차이를 출력한다.
  • N의 범위는 10 이상 100 이하, M의 범위는 2 이상 N 이하이다.
  • 정수의 범위는 1~10000이다.

문제 풀이 과정

  • 최소 합을 구하기 위해 minSum의 초기값을 float('inf')로 정의하였다.
  • N개의 정수, M개의 합을 계산할 때 총 합의 횟수는 (N-M+1) 번이다.
  • M개의 합을 계산할 때마다 min(), max() 함수를 사용하여 최대합, 최소합을 구하였다.
  • 테스트 케이스 번호, 최대합과 최소 합의 차이를 출력하였다.

코드

T = int(input())  #T: 테스트케이스 개수
for i in range(T):  #테스트케이스 번호: i+1
    N, M = map(int, input().split())  #N: 정수 개수, M: 구간 개수
    v = list(map(int, input().split()))  #v: 정수 저장 리스트
    maxSum = 0
    minSum = float('inf')
    for j in range(N-M+1):  #M개의 합 비교 횟수만큼(N-M+1) 반복
        tot = 0
        for m in range(M):  #M개의 합 구하기
            tot += v[j+m]
        maxSum = max(maxSum, tot)
        minSum = min(minSum, tot)
    rst = maxSum - minSum
    print("#{0} {1}".format((i+1), rst))

SW Expert Academy 4835번 구간합 문제는 리스트 자료구조 문제이며 언어는 파이썬을 사용하였다. 

 

Runtime error를 맞닥뜨렸는데 에러 메시지는 Error Message: Memory error occured, (e.g. segmentation error, memory limit Exceed, stack overflow,... etc)

입력 샘플에 띄어쓰기로 입력 값들이 구분되어 있어서 split(' ')으로 쓴 것이 원인이었다. split()으로 바꿨더니 에러가 해결되었다. split()은 공백, 탭, 엔터 등을 기준으로 문자열을 나누어 준다.

 

난이도 D2 중에서 보통 수준 같다. 해결 법을 생각해 내는데 오래 걸리지 않았고, 에러를 만났을 때에도 답은 맞게 나왔다. 

728x90
반응형

댓글