728x90

조합으로 구현했고 테스트 케이스는 통과했으나 메모리 초과가 나서 실패했다. 찾아보니 투 포인터를 사용한 이분 탐색으로 푸는 문제라고 한다. 잘 이해는 되지 않는다.

import sys
from itertools import combinations
import math
 
n,m = list(map(int,sys.stdin.readline().split(" ")))
 
k = list(map(int,sys.stdin.readline().split(" ")))
 
# 각 구간의 목표 : 최대와 최소 값의 차이가 가장 작아야 한다.
 
# 조합으로 컷 할 인덱스를 뽑기
'''
num = [ ]
 
for i in range(1,len(k)):
    num.append(i)
 
 
# 0~m , m_n+1, ,,, n~
com = list(combinations(num,m-1))
 
 
answer =  [] 
 
for i in range(0,len(com)):
 
    answers = [ ]
 
    queue = [0]+list(com[i])+[len(k)]
 
    for j in range(0,len(queue)-1):
 
        temp_arr = k[queue[j]:queue[j+1]]
 
        answers.append(max(temp_arr)-min(temp_arr))
 
    answer.append(max(answers))
 
print(min(answer))
 
'''                    
 
 
 
 
 
 
 
 
 
 

 

728x90

+ Recent posts