[Algorithm] 백준 - 9019번 DSLR (Swift) (시간초과)

2024. 6. 8. 13:36· → Problems
목차
  1. 문제 소개
  2. 문제 풀이
  3. 정답 코드

문제 소개

문제 자체는 간단하다. DSLR 연산을 통해 a에서 b까지 최소한의 명령어 나열을 출력하는 문제이다.

 

문제 풀이

이 문제는 푸는데는 시간이 많이 걸리지 않았지만 시간 초과로 애를 먹었다. 시간제한이 6초인데 겨우 5880ms 로 통과했다... 다시해봐도 5824ms 가 나오는 것을 봐서는 맞긴 맞은 모양이다...

눈물겨운 흔적들...

 

정답 코드

dslr 함수를 구현하고, bfs를 활용했다. L과 R연산을 문자배열을 만들어 하게되면 무조건 시간 초과가 나오게 되어서 연산으로만 구현해줘야 한다. 그리고 처음에는 queue 에 (num, command) 로 넣어주니 이것도 시간초과가 나왔다. 그래서 따로 commands 배열을 만들어 관리해주니 시간 단축이 되었다. queue도 removeFirst() 를 사용하지 않고 idx를 사용하여 관리해주었다. 물론 queue에서 pop을 해주지 않고 단순히 index로 관리해주면 메모리 문제가 있지만 여기서는 최대 10000개가 쌓이기 때문에 문제 없다고 생각했다.

import Foundation

let t = Int(readLine()!)!
let calc = ["D", "S", "L", "R"]

func dslr(_ num: Int, _ command: String) -> Int {
    switch command {
    case "D": return (num * 2) % 10000
    case "S": return num - 1 < 0 ? 9999 : num - 1
    case "L": return (num % 1000) * 10 + (num / 1000)
    case "R": return num / 10 + num % 10 * 1000
    default: return 0
    }
}

for _ in 0..<t {
    let ab = readLine()!.split(separator: " ").map { Int($0)! }
    let (a, b) = (ab[0], ab[1])
    
    var queue = [a]
    var idx = 0
    var visited = Array(repeating: false, count: 10000)
    var commands = Array(repeating: "", count: 10000)
    visited[a] = true
    
    while queue.count > idx {
        let poped = queue[idx]
        idx += 1
                
        if poped == b {
            print(commands[b])
            break
        }
        
        for cal in calc {
            let next = dslr(poped, cal)
            if !visited[next] {
                visited[next] = true
                commands[next] = commands[poped] + cal
                queue.append((next))
            }
        }
    }
}

'→ Problems' 카테고리의 다른 글

[Algorithm] 백준 - 12886번 돌 그룹 (Swift)  (0) 2024.06.10
[Algorithm] 백준 - 14502번 연구소 (Swift)  (1) 2024.06.09
[Algorithm] 백준 - 16928번 뱀과 사다리 게임 (Swift)  (0) 2024.06.07
[Algorithm] 백준 - 1062번 가르침 (Swift)  (1) 2024.06.06
[Algorithm] 백준 - 1987번 알파벳 (Swift) (비트마스크)  (0) 2024.06.05
  1. 문제 소개
  2. 문제 풀이
  3. 정답 코드
'→ Problems' 카테고리의 다른 글
  • [Algorithm] 백준 - 12886번 돌 그룹 (Swift)
  • [Algorithm] 백준 - 14502번 연구소 (Swift)
  • [Algorithm] 백준 - 16928번 뱀과 사다리 게임 (Swift)
  • [Algorithm] 백준 - 1062번 가르침 (Swift)
Swift librarian
Swift librarian
Swift LibrarySwift librarian 님의 블로그입니다.
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Algorithm] 백준 - 9019번 DSLR (Swift) (시간초과)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.