Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기 N
    • 부스트캠프
    • iOS N
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • 알고리즘
  • 백준
  • MVC
  • jekyll
  • 소프트웨어공학
  • CS
  • 모듈화
  • 오블완
  • AutoLayout
  • constraint
  • alamofire
  • Concurrency
  • SwiftUI
  • AVAudioSession
  • Animation
  • image
  • guard
  • Python
  • Git
  • swift
  • Optional
  • Swift5.7
  • 부스트캠프
  • 소프트웨어 공학
  • ios
  • if let
  • 티스토리챌린지
  • 소프트웨어 테스트
  • boj
  • ImageResource

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
알고리즘

[백준 BOJ] BOJ-1010 다리 놓기

2022. 9. 18. 20:28

#1010 다리 놓기

 

문제 정리

imageimage

 

풀이

import Foundation

let t = Int(readLine()!)!
var nm: [[Int]] = []
for _ in 0..<t {
    let input = readLine()!.split(separator: " ").map{ Int($0)! }
    nm.append(input)
}

func combination(n: Int, r: Int) -> Double {
    return factorial(n) / (factorial(n - r) * factorial(r))
}

func factorial(_ n: Int) -> Double {
    return (1..<n+1).map(Double.init).reduce(1.0) { $0 * $1 }
}

nm.forEach { nm in
    print( String(round(combination(n: nm[1], r: nm[0]))).dropLast(2) )
}

m개의 사이트에서 n개의 사이트를 골라 다리를 만드는 중복없는 조합을 구하는 문제였다.

image

조합 공식은 다음과 같기에

combination() 과 factorial()을 구현했다.

factorial() 의 반환형을 Int 로 하면 factorial(20) 의 값이 Int64의 범위를 넘어 오버플로우가 발생하기 때문에 Double로 구현했다.

그다음 경우의 수는 소숫점이 없기 때문에 round() 함수로 반올림 처리를 해주고

숫자 뒤 .0을 지워주기 위해 String()으로 형변환 후 dropLast(n) 함수로 .0 부분을 없앴다.

시간복잡도

reduce 는 O(n) 의 시간복잡도를 갖고 있기 때문에

O(n) 이 된다.

 

풀고나서 알게된 것

이론으로만 배웠던 오버플로우를 실제로 경험하니 신기하기도 하고 난감했다.

factorial 처럼 계산값이 커지는게 예상되면 오버플로우를 생각하며 코드를 짜야겠다.

저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

[백준 BOJ] BOJ-8393 합  (0) 2022.09.18
[백준 BOJ] BOJ-7568 덩치  (0) 2022.09.18
[백준 BOJ] BOJ-1920 수 찾기  (0) 2022.09.18
[백준 BOJ] BOJ-1059 좋은 구간  (0) 2022.09.18
[백준 BOJ] BOJ-1008 A/B  (0) 2022.09.18
    '알고리즘' 카테고리의 다른 글
    • [백준 BOJ] BOJ-7568 덩치
    • [백준 BOJ] BOJ-1920 수 찾기
    • [백준 BOJ] BOJ-1059 좋은 구간
    • [백준 BOJ] BOJ-1008 A/B
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바