[백준] 7576, 토마토 (Swift)

2024. 2. 13. 10:05·🖥️ Computer Science/Algorithm

- 일반적인 bfs 사용 시 시간초과 발생

- Queue에 pop 하여 원소를 빼내지 말고, 인덱스적 접근을 할 것 (시간초과 확보 가능)

- 입력으로부터 graph 만드는 능력이 아직 부족함

 

// 24년 겨울 알고리즘 스터디
// BOJ & 프로그래머스
//
// Created by 박효준 on 1/10/24.
// bfs 탐색

import Foundation

let MN = readLine()!.split(separator: " ").map{Int(String($0))!}
let M = MN[0], N = MN[1]
var graph: [[Int]] = []
let mx = [0,0,-1,1], my = [-1,1,0,0]
for _ in 0..<N {
    let tomato: [Int] = readLine()!.split(separator: " ").map{Int(String($0))!}
    graph.append(tomato)
}

var day: [[Int]] = Array(repeating: Array(repeating: 0, count: M), count: N)
var queue: [(Int, Int)] = []
var alltomato = true
var lastIdx: (Int, Int) = (0,0)
var idx = 0
func bfs() {
    while idx < queue.count {
        let cur = queue[idx]
        idx += 1
        for i in 0..<4 {
            let nx = mx[i] + cur.0, ny = my[i] + cur.1
            if nx >= 0 && nx < N && ny >= 0 && ny < M {
                if graph[nx][ny] == 0 {
                    graph[nx][ny] = 1
                    day[nx][ny] = day[cur.0][cur.1] + 1
                    queue.append((nx,ny))
                    lastIdx = (nx, ny)
                }
            }
        }
    }
}

for i in 0..<N {
    for j in 0..<M {
        if graph[i][j] == 1 {
            queue.append((i,j))
        }
    }
}

bfs()

for i in 0..<N {
    for j in 0..<M {
        if graph[i][j] == 0 {
            alltomato = false
        }
    }
}

alltomato ? print(day[lastIdx.0][lastIdx.1]) : print(-1)
저작자표시 (새창열림)

'🖥️ Computer Science > Algorithm' 카테고리의 다른 글

Swift로 알고리즘 풀 때 알아둬야할 것들  (1) 2024.07.01
Swift로 코드 최적화하기  (1) 2024.05.25
[백준] 2644, 촌수계산(C++, BFS)  (2) 2023.09.02
[백준] 13414, 수강신청 (C++, 해시맵)  (0) 2023.08.10
[C언어] 표준 입력 함수, scanf() 함수의 오류 찾기  (0) 2023.05.31
'🖥️ Computer Science/Algorithm' 카테고리의 다른 글
  • Swift로 알고리즘 풀 때 알아둬야할 것들
  • Swift로 코드 최적화하기
  • [백준] 2644, 촌수계산(C++, BFS)
  • [백준] 13414, 수강신청 (C++, 해시맵)
kyxxn
kyxxn
컴퓨터공학을 좋아하는 대학생의 공부 일기
  • kyxxn
    컴공 학부생의 공부 일기
    kyxxn
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • 📱 iOS (64)
        • Xcode (10)
        • Swift (17)
        • Swift Concurrency (12)
        • UIKit (21)
        • SwiftUI (0)
      • 🖥️ Computer Science (57)
        • 🏛️ Software Architecture Pa.. (2)
        • 👨🏻‍🎨 Design Pattern (3)
        • Data Structure (4)
        • Algorithm (10)
        • Computer Architecture (4)
        • Operating System (19)
        • Network (15)
      • ✍🏻 회고록 (9)
      • 🎸 기타 (25)
        • 해커톤 (1)
        • git (6)
        • 세미나 (1)
        • 책을 읽고 (1)
        • AOS, Kotlin (6)
        • Reinforcement Learning (9)
  • 블로그 메뉴

    • 링크

      • 깃허브
      • 일상 블로그
    • 공지사항

    • 인기 글

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    kyxxn
    [백준] 7576, 토마토 (Swift)
    상단으로

    티스토리툴바