문제 풀이를 할 때 마다 계속 추가됩니다.

cmd + F 를 통해 문제번호 찾기를 추천드립니다.

풀이글이 길어짐에 따라 글을 나눕니다. 지난번 글은 아래 링크에서 확인하실 수 있습니다.

 

https://developer-p.tistory.com/166

 

백준 Swift 1000번, 1001번, 1008번, 2557번, 10718번, 10171번, 10998번, 10869번, 10430번, 2588번, 1330번, 9498번, 27

문제 풀이를 할 때 마다 계속 추가됩니다. cmd + F 를 통해 문제번호 찾기를 추천드립니다. 22.02.10 최초 게시 22.02.11 업데이트 22.02.16 업데이트 22.02.21 업데이트 22.02.22 업데이트 백준 Swift 1000번, 10..

developer-p.tistory.com

 

22.02.23 최초 게시

22.02.23 업데이트

22.03.07 업데이트

22.03.16 업데이트

 

아래 깃허브 주소에서 백준 Swift 문제풀이를 확인하실 수 있습니다.

https://github.com/SuminPark-developer/BaekJoonPS

 

GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS

백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.

github.com

 


 

백준 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
    }
}

 


 

반응형