KWiOS
KWiOS0101
KWiOS
  • 분류 전체보기 (108)
    • Algorithm (41)
      • 이코테 (14)
      • 이코테 문제풀이 (21)
      • 프로그래머스 (6)
    • CS (1)
      • 모두를 위한 컴퓨터 과학(CS50 2019) (0)
    • iOS (15)
    • Swift (36)
      • Swift문법 (32)
      • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
KWiOS

KWiOS0101

다이나믹 프로그래밍 - 개미 전사(Swift)
Algorithm/이코테 문제풀이

다이나믹 프로그래밍 - 개미 전사(Swift)

2022. 8. 9. 18:42
본 내용은 '이것이 취업을 위한 코딩테스트다 with 파이썬' 책을 기반으로 포스팅 하였습니다.

 

문제

저작권 문제가 될 수 있어 문제는 삭제합니다.

 

풀이 코드

let n = 4
let k = [1,3,1,5]

var dp = Array(repeating: 0, count: 100)

// dp[0] 위치에 1 추가
dp[0] = k[0]

// dp[1] 위치에 입력받은 k배열의 0,1위치값중 큰 값 추가
dp[1] = max(k[0],k[1])

for i in 2..<n {
    dp[i] = max(dp[i-1], dp[i-2] + k[i])
}

print(dp[n-1]) // 8

/*
 최적의 해를 구해보면
 창고 => k = |1|3|1|5|
 
 창고가 1개일때 -> 1
 창고가 2개일때 -> 3
 창고가 3개일때 -> 3
 창고가 4개일때 -> 8
 
 최소한 한칸 이상 떨어진 식량창고를 약탈해야하기 때문에 점화식을 구해보면
 현재위치의 -1의 위치의 값, 현재위치의 -2의 위치의 값 + 현재위치 값으로 2가지 경우를 가지고 비교해볼수 있다.
 # dp[i-1], (dp[i-2] + k[i])
 
 k = |1|3|1|5|
 위 배열에서 2가지 경우를 계산 하려면 2번째 위치에서부터 시작해야하며
 
 i = 2
 |0|1|2|3|
 |1|3|1|5|
 dp[i-1] => 3
 dp[i-2] + k[i] => 1 + 1 = 2
 둘중 큰 식량 개수 3
 dp[i] = 3
 
 i = 3
 |0|1|2|3|
 |1|3|1|5|
 dp[i-1] => 1
 dp[i-2] + k[i] => 3 + 5 = 8
 둘중 큰 식량 개수 8
 dp[i] = 8
 */

 

문제 풀이

주석 참고

'Algorithm > 이코테 문제풀이' 카테고리의 다른 글

다이나믹 프로그래밍 - 효율적인 화폐 구성(Swift)  (0) 2022.08.09
다이나믹 프로그래밍 - 바닥 공사(Swift)  (0) 2022.08.09
다이나믹 프로그래밍 - 1로 만들기(Swift)  (0) 2022.08.09
이진 탐색 - 떡볶이 떡 만들기(Swift)  (0) 2022.08.09
이진 탐색 - 부품 찾기(Swift)  (0) 2022.08.09
    'Algorithm/이코테 문제풀이' 카테고리의 다른 글
    • 다이나믹 프로그래밍 - 효율적인 화폐 구성(Swift)
    • 다이나믹 프로그래밍 - 바닥 공사(Swift)
    • 다이나믹 프로그래밍 - 1로 만들기(Swift)
    • 이진 탐색 - 떡볶이 떡 만들기(Swift)
    KWiOS
    KWiOS

    티스토리툴바