BOJ 1865 웜홀 swift

2025. 5. 27. 11:05·알고리즘
문제 링크 : https://www.acmicpc.net/problem/1865

 

 

문제 해설

해당 문제는 양방향 간선(도로)와 단방향 간선(웜홀)을 입력받아 음수 사이클이 발생하는 지에 대해 알아보는 문제입니다.

  • 양방향 간선(도로)와 단방향 간선(웜홀)을 입력받아 edges에 추가합니다.
  • 벨만-포드 알고리즘을 사용하기 위해 거리 배열을 초기화 시킵니다.(이때 거리는 무한입니다.)
  • 시작점에서 모든 간선을 N-1번 반복하여 최단거리를 갱신합니다.
  • 갱신이 완료되고, 한번 더 실행시켰을 때 갱신이 발생하면 음수 사이클이 존재하는 것입니다.

 

코드

더보기
import Foundation

if let tc = Int(readLine()!) {
    for _ in 0..<tc {
        let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
        let n = input[0], m = input[1], w = input[2]
        var edges: [(Int, Int, Int)] = []

        for _ in 0..<m {
            let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
            let x = input[0], y = input[1], distance = input[2]
            edges.append((x, y, distance))
            edges.append((y, x, distance))
        }

        for _ in 0..<w {
            let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
            let x = input[0], y = input[1], distance = input[2]
            edges.append((x, y, -distance))
        }

        var distance = [Int](repeating: 123_456_789, count: n + 1)
        distance[0] = 0
        for i in 1...n {
            edges.append((0, i , 0))
        }

        // 벨만-포드
        for _ in 1...n {
            for (x, y, dist) in edges {
                if distance[y] > distance[x] + dist {
                    distance[y] = distance[x] + dist
                }
            }
        }

        var negCycle = false
        for (x, y, dist) in edges {
            if distance[y] > distance[x] + dist {
                negCycle = true
                break
            }
        }

        if negCycle {
            print("YES")
        } else {
            print("NO")
        }
    }
}

 

'알고리즘' 카테고리의 다른 글
  • BOJ 2449 전구 swift
  • BOJ 1799 비숍
  • BOJ 1918 후위 표기식 swift
  • BOJ 2110 공유기 설치 swift
GwanSon
GwanSon
버그는 도전, 코드는 해결. 열정있는 개발을 하자.
  • GwanSon
    관슨의 개발일지
    GwanSon
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • iOS (3)
      • swift (15)
      • UIKit (0)
      • swiftUI (2)
      • 알고리즘 (8)
      • CS (8)
      • 면접 (11)
      • Flutter (4)
      • 회고 (2)
      • 잡담 (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
GwanSon
BOJ 1865 웜홀 swift
상단으로

티스토리툴바