문제 풀이를 할 때 마다 계속 추가됩니다.
cmd + F 를 통해 문제번호 찾기를 추천드립니다.
풀이글이 길어짐에 따라 글을 나눕니다. 지난번 글은 아래 링크에서 확인하실 수 있습니다.
https://developer-p.tistory.com/166
22.02.23 최초 게시
22.02.23 업데이트
22.03.07 업데이트
22.03.16 업데이트
아래 깃허브 주소에서 백준 Swift 문제풀이를 확인하실 수 있습니다.
https://github.com/SuminPark-developer/BaekJoonPS
백준 Swift 2869번
// MARK: - 2869번
import Foundation
let input = readLine()!.split(separator: " ").map{Double(String($0))!}
let (A, B, V) = (input[0], input[1], input[2])
var sum: Double = 0.0
var count: Double = 0.0 // 일자
// 이렇게 하면 시간이 너무 오래 걸림.
//while true {
// sum += A
// count += 1
//
// if sum >= V {
// break
// }
//
// sum -= B
//}
//
//print(count)
if A == V { // 높이V와 올라가는A가 똑같으면 한번만에 올라감.
count = 1
}
else { // 여러날이 필요한 상황이라면,
let va: Double = V - A // V - A
let ab: Double = A - B // A - B
count = 1 + ceil(va / ab)
}
print(Int(count))
백준 Swift 10250번
let T = Int(readLine()!)!
for _ in 0..<T {
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (H, W, N) = (input[0], input[1], input[2]) // H: 높이(층 수), W: 가로(방 수), N: 몇 번째 손님
var xx: Int = 0
var yy: Int = 0
var answer: String = ""
// if H == N { // 꼭대기층이면,
// yy = H // 층 수
// xx = (N / H) // 호실
// }
if N % H == 0 { // 꼭대기층이면,
yy = H // 층 수
xx = (N / H) // 호실
if (N / H) >= 10 {
answer = String(yy) + String(xx)
}
else {
answer = String(yy) + "0" + String(xx)
}
}
else { // 꼭대기 아닐 때,
yy = N % H // 층 수
xx = (N / H) + 1 // 호실
if (N / H) + 1>= 10 {
answer = String(yy) + String(xx)
}
else {
answer = String(yy) + "0" + String(xx)
}
}
print(answer)
}
백준 Swift 2775번(1) - 재귀함수 사용
// MARK: - 2775번(1) - 재귀함수
let T = Int(readLine()!)!
func getCitizen(_ k: Int, _ n: Int) -> Int {
if k == 0 || n == 1 {
return n
}
return getCitizen(k - 1, n) + getCitizen(k, n - 1) // (k-1층의 n호), (k층의 n-1호)
}
for _ in 0..<T {
let k = Int(readLine()!)!
let n = Int(readLine()!)!
print(getCitizen(k, n))
}
백준 Swift 2775번(2) - 2차원배열 사용
// MARK: - 2775번(2) - 2차원배열
let T = Int(readLine()!)!
for _ in 0..<T {
let k = Int(readLine()!)!
let n = Int(readLine()!)!
var apart: [[Int]] = Array(repeating: Array(repeating: 0, count: n + 1), count: k + 1)
for i in 0...k { // 각 층을 돌면서,
for j in 0...n { // 각 호를 돌면서,
if i == 0 { // 0층일 땐,
apart[i][j] = j + 1
}
else { // 다른 층일 땐,
if j == 0 { // 1호일 땐,
apart[i][j] = 1
}
else { // 2호이상일땐,
apart[i][j] = apart[i-1][j] + apart[i][j-1]
}
}
}
}
print(apart[k][n-1])
}
백준 Swift 1085번
// MARK: - 1085번
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (x, y, w, h) = (input[0], input[1], input[2], input[3])
let distanceArray = [x, y, w - x, h - y]
print(distanceArray.min()!)
백준 Swift 2309번
// MARK: - 2309번
func combi(_ nums: [Int], _ targetNum: Int) -> [[Int]] {
var results: [[Int]] = []
func combination(_ index: Int, _ nowCombi: [Int]) {
if nowCombi.count == targetNum {
results.append(nowCombi)
return
}
for i in index..<nums.count {
combination(i + 1, nowCombi + [nums[i]])
}
}
combination(0, [])
return results
}
var heights: [Int] = [] // 키 모두 입력받음.
for _ in 0..<9 {
heights.append(Int(readLine()!)!)
}
heights.sort(by: <)
var satisfyHeights = combi(heights, 7) // 키 들 중, 난쟁이(7명) 가능한 조합 다 구함.
for height in satisfyHeights {
if height.reduce(0, +) == 100 { // 난쟁이들의 키의 합이 100이면,
for k in height {
print(k)
}
break
}
}
반응형
최근댓글