게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[본삭금] Dynamic Programming 같이 고민부탁드립니다 ㅠ
게시물ID : programmer_17579짧은주소 복사하기
작성자 : 플래시메모리
추천 : 0
조회수 : 400회
댓글수 : 0개
등록시간 : 2016/06/12 00:39:43
옵션
  • 본인삭제금지
안녕하세요
 
혼자서 알고리즘 공부하다가 한 예제를 찾은게,
 
N개의 요소를 가진 circular array를 M개의 group으로 이웃한 것들끼리 묶었을 때 (안묶이는 요소가 없이 모두 묶어야함),
M개의 group 중 group내 합이 가장 큰 값이랑 작은 값의 차가 최소가 되게 묶은 경우 그 최소의 값을 구하여라.
 
라는 문제가 있는데
 
예를 들어
circular array가
 
8 13 2 9 4
이며
 
M = 3 개의 group으로 묶는 경우
 
8 }  { 13 } { 2 9 } { 4
 
이렇게 묶어야 최대가 13, 최소가 11이 되어 13-11 = 2가 정답입니다.
 
 
이런 문제가 있는데 recursive로 풀면 답이야 쉽게 나오지만 (엄청난 시간복잡도.....)
dynamic programming으로 풀 경우 도저히 아이디어가 떠오르지 않네요
 
어떤걸 memo하고 어떤걸 for loop로 둬야할지....
 
greedy도 생각해봤는데 제일 큰 값을 중심으로 묶어나가는거는 너무 불안할거같기도하고요..
 
어렵네요ㅠㅠ
 
 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호