BOJ 2449 전구 swift

2025. 6. 3. 16:04·알고리즘
문제 링크 : https://www.acmicpc.net/problem/2449

 

문제 해설

N개의 전구가 일렬로 배치되어 있고, 각 전구는 1부터 K까지의 색으로 표현됩니다. 한 번에 연속된 같은 색의 전구 그룹을 선택해 다른 색으로 변경할 수 있을 때, 모든 전구를 같은 색으로 만드는 최소 변경 횟수를 구하는 문제입니다.

  • 연속된 같은 색 전구를 하나의 그룹으로 압축합니다.
  • dp[i][j]를 i번째 그룹부터 j번째 그룹까지 같은 색으로 만드는 최소 횟수로 정의합니다.
  • 점화식 : dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + (colors[i] != colors[k + 1] ? 1 : 0)

 

코드

더보기
import Foundation

let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let n = input[0], k = input[1]

let arr = readLine()!.split(separator: " ").map{ Int(String($0))! }

var colors = [Int]()

for i in 0..<n {
    if i == 0 || arr[i] != arr[i - 1] {
        colors.append(arr[i])
    }
}

let m = colors.count

if m == 1 {
    print(0)
} else {
    var dp = [[Int]](repeating: [Int](repeating: Int.max / 2, count: m), count: m)

    for i in 0..<m {
        dp[i][i] = 0
    }

    for length in 2...m {
        for start in 0...(m - length) {
			let end = start + length - 1

            for mid in start..<end {
                let cost = (colors[start] != colors[mid + 1]) ? 1 : 0
                dp[start][end] = min(dp[start][end], dp[start][mid] + dp[mid + 1][end] + cost)
            }
        }
    }

    print(dp[0][m - 1])
}

 

'알고리즘' 카테고리의 다른 글
  • BOJ 1222 홍준 프로그래밍 대회 swift
  • BOJ 3190 뱀 swift
  • BOJ 1799 비숍
  • BOJ 1865 웜홀 swift
GwanSon
GwanSon
버그는 도전, 코드는 해결. 열정있는 개발을 하자.
  • GwanSon
    관슨의 개발일지
    GwanSon
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • iOS (3)
      • swift (15)
      • UIKit (0)
      • swiftUI (2)
      • 알고리즘 (8)
      • CS (8)
      • 면접 (11)
      • Flutter (4)
      • 회고 (2)
      • 잡담 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    2025 토스 Next
    챌린지
    부스트캠프
    ios
    토스
    백준
    모듈화
    부스트캠프 10기
    Swift
    tuist
    후기
    네이버 부스트캠프 후기
    boj
    네이버 부스트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
GwanSon
BOJ 2449 전구 swift
상단으로

티스토리툴바