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

다이나믹 프로그래밍 - 1로 만들기(Swift)
Algorithm/이코테 문제풀이

다이나믹 프로그래밍 - 1로 만들기(Swift)

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

 

문제

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

 

풀이 코드

//input
var n = 26

// 입력조건 최대값 30000 + 1 크기의 dp테이블 선언
var dp = Array(repeating: 0, count: 30000 + 1)

// 시작을 2로 하는 이유는
// 1을 만들어야 하기 때문에 0과 1은 계산 X
for i in 2..<n+1 {
    
    dp[i] = dp[i - 1] + 1
    
    if i % 2 == 0 {
        dp[i] = min(dp[i], dp[i / 2] + 1)
    }
    if i % 3 == 0 {
        dp[i] = min(dp[i], dp[i / 3] + 1)
    }
    if i % 5 == 0 {
        dp[i] = min(dp[i], dp[i / 5] + 1)
    }
}

print(dp[n]) // 3

/*
 i 1을 빼는 경우
 2      1
 3      2
 4      3
 5      4
 6      5
 dp[i] = d[[i - 1] + 1 // 1을 빼준 경우 1회 +1
 
 i 2로 나눠질 경우
 2      1
 3
 4      2
 5
 6      3
 dp[i] = d[[i / 2] + 1 // 2로 나눈 경우 1회 +1
 
 i 3으로 나눠질 경우
 2
 3      1
 4
 5
 6      2
 dp[i] = d[[i / 3] + 1 // 3으로 나눈 경우 1회 +1
 
 i 5로 나눠질 경우
 2
 3
 4
 5      1
 6
 dp[i] = d[[i / 5] + 1 // 5로 나눈 경우 1회 +1
 
 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
 n = 6 일때
 
 idx = |0|1|2|3|4|5|6|
 dp  = |0|0|0|0|0|0|0|
 
 i = 2
 1을 빼는 경우 -> dp[i-1] + 1 = 1
 2로 나눠지는 경우 -> dp[i/2] + 1 = 1
 둘중 작은 경우 1
 idx = |0|1|2|3|4|5|6|
 dp  = |0|0|1|0|0|0|0|
 
 i = 3
 1을 빼는 경우 -> dp[i-1] + 1 = 2
 3으로 나눠지는 경우 -> dp[i/3] + 1 = 1
 둘중 작은 경우 1
 idx = |0|1|2|3|4|5|6|
 dp  = |0|0|1|1|0|0|0|
 
 i = 4
 1을 빼는 경우 -> dp[i-1] + 1 = 2
 2로 나눠지는 경우 -> dp[i/2] + 1 = 2
 둘중 작은 경우 2
 idx = |0|1|2|3|4|5|6|
 dp  = |0|0|1|1|2|0|0|
 
 i = 5
 1을 빼는 경우 -> dp[i-1] + 1 = 3
 5로 나눠지는 경우 -> dp[i/5] + 1 = 1
 둘중 작은 경우 1
 idx = |0|1|2|3|4|5|6|
 dp  = |0|0|1|1|2|1|0|
 
 i = 6
 1을 빼는 경우 -> dp[i-1] + 1 = 2
 2로 나눠지는 경우 -> dp[i/2] + 1 = 2
 3으로 나눠지는 경우 -> dp[i/3] + 1 = 2
 둘중 작은 경우 2
 idx = |0|1|2|3|4|5|6|
 dp  = |0|0|1|1|2|1|2|
*/

 

문제 풀이

주석 참고

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

다이나믹 프로그래밍 - 바닥 공사(Swift)  (0) 2022.08.09
다이나믹 프로그래밍 - 개미 전사(Swift)  (0) 2022.08.09
이진 탐색 - 떡볶이 떡 만들기(Swift)  (0) 2022.08.09
이진 탐색 - 부품 찾기(Swift)  (0) 2022.08.09
정렬 - 두 배열의 원소 교체(Swift)  (0) 2022.08.09
    'Algorithm/이코테 문제풀이' 카테고리의 다른 글
    • 다이나믹 프로그래밍 - 바닥 공사(Swift)
    • 다이나믹 프로그래밍 - 개미 전사(Swift)
    • 이진 탐색 - 떡볶이 떡 만들기(Swift)
    • 이진 탐색 - 부품 찾기(Swift)
    KWiOS
    KWiOS

    티스토리툴바