→ Problems

[Algorithm] 백준 - 14226번 이모티콘 (Swift)

Swift librarian 2024. 5. 22. 22:24

문제 소개

조금 복잡한 문제였다. 이모티콘, 클립보드에 대한 조건이 생각할 것이 많았다.

문제 풀이

BFS를 활용해서 풀었고, 이모티콘, 클립보드, 시간을 queue에 넣어줬다. 또한 방문은 visited 2차원 배열을 사용했다. 왜냐하면 클립보드에 저장한다는 특수한 조건이 있어서 2차원 배열로 저장했다.

import Foundation

let s = Int(readLine()!)!

var visited = Array(repeating: Array(repeating: false, count: 1001), count: 1003)
visited[1][0] = true

var queue = [(1, 0, 0)]
var idx = 0

while queue.count > idx {
    let emoji = queue[idx].0
    let clip = queue[idx].1
    let time = queue[idx].2
    idx += 1
    
    if emoji == s {
        print(time)
        break
    }
    
    if emoji > 0 && emoji < 1001 {
        if !visited[emoji][emoji] {
            visited[emoji][emoji] = true
            queue.append((emoji, emoji, time+1))
        }
    
        if !visited[emoji-1][clip] {
            visited[emoji-1][clip] = true
            queue.append((emoji-1, clip, time+1))
        }
    }
    
    if emoji+clip < 1001 {
        if !visited[emoji+clip][clip] {
            visited[emoji+clip][clip] = true
            queue.append((emoji+clip, clip, time+1))
        }
    }
}