오늘은 못 풀었던 문제를 다시 푸는 날 입니다.

하지만 특별히 못 풀었던 문제는 없어서, 임의로 약 15문제를 푸려고 합니다. (실버2 ~ 브론즈3 예상)

 

22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.

 

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

 

[22일 Basic 챌린지 참여] 알고리즘 DAY1

22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..

developer-p.tistory.com

 

아래 깃허브 주소에서 백준 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

 


 

Day 16

220308 공부 일지 : 오늘 꽤 많은 문제를 풀었다.
예전에 못 풀었던 문제도 해결해서 좋았고, 예전의 코드에 비해 개선된 점도 있어서 좋다.

220308 공부 일지

 

 


백준 Swift 3009번

// MARK: - 3009번
var input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (x1, y1) = (input[0], input[1])
input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (x2, y2) = (input[0], input[1])
input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (x3, y3) = (input[0], input[1])

var (x4, y4) = (0, 0)

// x4구하는 부분
if x1 == x2 {
    x4 = x3
}
else if x1 == x3 {
    x4 = x2
}
else if x2 == x3 {
    x4 = x1
}
// y4구하는 부분
if y1 == y2 {
    y4 = y3
}
else if y1 == y3 {
    y4 = y2
}
else if y2 == y3 {
    y4 = y1
}

print(x4, y4)

 


백준 Swift 4153번

// MARK: - 4153번
import Foundation
while true {
    let input = readLine()!.split(separator: " ").map{Double(String($0))!}
    let triangleArray = input.sorted(by: <) // 가장 긴 변이 c
    
    let (a, b, c) = (triangleArray[0], triangleArray[1], triangleArray[2])
    
    if a == 0 && b == 0 && c == 0 {
        break
    }
    
    if pow(c, 2.0) == (pow(a, 2.0) + pow(b, 2.0)) {
        print("right")
    }
    else {
        print("wrong")
    }
    
}

 


백준 Swift 3053번

// MARK: - 3053번
import Foundation
let R = Double(readLine()!)!
let uclid: Double = Double.pi * R * R
let taxi = 2 * R * R

print(String(format: "%.6f", uclid))
print(String(format: "%.6f", taxi))

 


백준 Swift 1002번

백준 Swift 1002번 Case 분류

// MARK: - 1002번
import Foundation
let T = Int(readLine()!)!

for _ in 0..<T {
    let input = readLine()!.split(separator: " ").map{Double(String($0))!}
    var (x1, y1, r1) = (input[0], input[1], input[2])
    var (x2, y2, r2) = (input[3], input[4], input[5])
    var answer: Int = 0
    
    let d = sqrt(pow(x2 - x1, 2.0) + pow(y2 - y1, 2.0))
    
    if d > (r1 + r2) { // Case 1
        answer = 0
    }
    else if d == (r1 + r2) { // Case 2
        answer = 1
    }
    
    else {
        if r1 < r2 { // 가정이 r1>=r2이기 때문에, 맞춰주기 위해서 swap.
            swap(&r1, &r2)
        }
        
        if ((r1 - r2) < d) && (d < (r1 + r2)) { // Case 3
            answer = 2
        }
        else if d != 0 && d == (r1 - r2) { // Case 4
            answer = 1
        }
        else if d != 0 && d < (r1 - r2) { // Case 5
            answer = 0
        }
        else if r1 == r2 && d == 0 { // Case 6
            answer = -1
        }
        else if r1 != r2 && d == 0 { // Case 7
            answer = 0
        }
    }
        
    print(answer)
}

 


백준 Swift 10872번

// MARK: - 10872번
let N = Int(readLine()!)!
var answer: Int = 1

if N != 0 {
    for i in 1...N {
        answer *= i
    }
}

print(answer)

 


백준 Swift 10989번

// MARK: - 10989번 (참고 : https://blog.naver.com/PostView.nhn?blogId=gustn3964&logNo=222257475333)
import Foundation

// 라이노님의 FileIO 클래스
final class FileIO {
    private var buffer:[UInt8]
    private var index: Int

    init(fileHandle: FileHandle = FileHandle.standardInput) {
        buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)] // 인덱스 범위 넘어가는 것 방지
        index = 0
    }

    @inline(__always) private func read() -> UInt8 {
        defer { index += 1 }

        return buffer.withUnsafeBufferPointer { $0[index] }
    }

    @inline(__always) func readInt() -> Int {
        var sum = 0
        var now = read()
        var isPositive = true

        while now == 10
            || now == 32 { now = read() } // 공백과 줄바꿈 무시
        if now == 45{ isPositive.toggle(); now = read() } // 음수 처리
        while now >= 48, now <= 57 {
            sum = sum * 10 + Int(now-48)
            now = read()
        }

        return sum * (isPositive ? 1:-1)
    }

    @inline(__always) func readString() -> String {
        var str = ""
        var now = read()

        while now == 10
            || now == 32 { now = read() } // 공백과 줄바꿈 무시

        while now != 10
            && now != 32 && now != 0 {
                str += String(bytes: [now], encoding: .ascii)!
                now = read()
        }

        return str
    }
}

let file = FileIO()

let N = file.readInt()
var dp = Array(repeating: 0, count: 10001)
for _ in 0..<N {
    let q = file.readInt()
    dp[q] += 1
}

var answer = ""
for i in 1...10000 {
    answer += String(repeating: "\(i)\n", count: dp[i])
}
print(answer)

 


백준 Swift 2798번

조합(Combination) 구현 : https://developer-p.tistory.com/145

 

스위프트 | "순열과 조합 구현"하기 (Swift5 | Permutation, Combination)

백준 10974번을 스위프트로 풀면서 난관에 봉착했습니다. 파이썬에는 간단한 순열 & 조합이 스위프트엔 없다는 것이죠. 스위프트를 공부한 지 얼마 되지 않은 상황에서, 파이썬에선 기본함수인

developer-p.tistory.com

// MARK: - 2798번
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (N, M) = (input[0], input[1])

let cards = readLine()!.split(separator: " ").map{Int(String($0))!}.sorted(by: <)

func combi(_ nums: [Int], _ targetNum: Int) -> [[Int]] {
    var result = [[Int]]()
    
    func combination(_ index: Int, _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            result.append(nowCombi)
            return
        }
        for i in index..<nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    
    combination(0, [])
    
    return result
}

// 3"H"N(3+N-1"C"N) <= M
var sumArray: [Int] = []
for numArray in combi(cards, 3) {
    let sum = numArray.reduce(0, +)
    if sum <= M {
        sumArray.append(sum)
    }
}

print(sumArray.max()!)

 


백준 Swift 2231번

// MARK: - 2231번
let N = Int(readLine()!)!
var answerArray: [Int] = []

for num in stride(from: N-1, to: 0, by: -1) {
    let numStr = String(num).map{String($0)}
    let numArray = numStr.map{Int(String($0))!}
    
    let sum = num + numArray.reduce(0, +)
    
    if sum == N {
        answerArray.append(num)
    }
    
}

if answerArray.isEmpty {
    print("0")
}
else {
    print(answerArray.min()!)
}

 


백준 Swift 7568번

// MARK: - 7568번
let N = Int(readLine()!)!
var person: [[Int]] = []
var rank = Array(repeating: 0, count: N) // 순위 배열

for _ in 0..<N {
    let input = readLine()!.split(separator: " ").map{Int(String($0))!}
    
    person.append(input)
    
}

for i in 0..<N {
    var rankCount: Int = 0
    
    for j in 0..<N {
        if (person[i].first! < person[j].first!) { // 몸무게
            if (person[i].last! < person[j].last!) { // 키까지 작으면 랭킹 뒤로 밀림.
                rankCount += 1 // 나보다 큰 애가 몇명인지 카운트.
            }
        }
    }
    
    rank[i] = rankCount + 1
}


for num in rank {
    print(num, terminator: " ")
}

 


백준 Swift 1436번

// MARK: - 1436번
let N = Int(readLine()!)!
var num: Int = 665
var count: Int = 0

while true {
    let numArray = String(num).map{Int(String($0))!}
    
    for i in 0...numArray.count-3 {
        if numArray[i] == 6 {
            if numArray[i+1] == 6 {
                if numArray[i+2] == 6 {
                    count += 1
                    break
                }
            }
        }
    }
    
    if count == N {
        break
    }
    
    num += 1
}

print(num)

 


백준 Swift 2750번

// MARK: - 2750번
let N = Int(readLine()!)!
var numArray: [Int] = []

for _ in 0..<N {
    numArray.append(Int(readLine()!)!)
}

numArray.sort(by: <)

for num in numArray {
    print(num)
}

 


백준 Swift 2751번

// MARK: - 2751번
let N = Int(readLine()!)!
var numArray: [Int] = []

for _ in 0..<N {
    numArray.append(Int(readLine()!)!)
}

numArray.sort(by: <)

for num in numArray {
    print(num)
}

 


백준 Swift 10974번

// MARK: - 10974번
let N = Int(readLine()!)!

func permute(_ nums: [Int], _ targetNum: Int) -> [[Int]] { // 순열
    var results = [[Int]]()
    var visited = Array(repeating: false, count: nums.count)
    
    func permutation(_ nowPermute: [Int]) {
        if nowPermute.count == targetNum {
            results.append(nowPermute)
            return
        }
        for i in 0..<nums.count {
            if visited[i] == false {
                visited[i] = true
                permutation(nowPermute + [nums[i]])
                visited[i] = false
            }
        }
    }
    permutation([])
    return results
}

//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 nums: [Int] = []
for num in 1...N {
    nums.append(num)
}

for numArray in permute(nums, nums.count) {
    for num in numArray {
        print(num, terminator: " ")
    }
    print()
}

 


백준 Swift 2503번

// MARK: - 2503번(참고 : https://kongpowder.tistory.com/50)
let N = Int(readLine()!)!

func permute(_ nums: [String], _ targetNum: Int) -> [[String]] {
    var results = [[String]]()
    var visited = Array(repeating: false, count: nums.count)
    
    func permutation(_ nowPermute: [String]) {
        if nowPermute.count == targetNum {
            results.append(nowPermute)
            return
        }
        for i in 0..<nums.count {
            if visited[i] == false {
                visited[i] = true
                permutation(nowPermute + [nums[i]])
                visited[i] = false
            }
        }
    }
    permutation([])
    return results
}

var nums = permute(["1", "2", "3", "4", "5", "6", "7", "8", "9"], 3)
var deleteNums: [[String]] = []
//nums.remove(at: nums.firstIndex(of: ["1", "2", "3"])!)

for _ in 0..<N {
    let input = readLine()!.split(separator: " ").map{Int(String($0))!}
    let (num, strike, ball) = (String(input[0]).map{String($0)}, input[1], input[2])

    for i in 0..<nums.count {
        var strikeCount: Int = 0
        var ballCount: Int = 0

        for j in 0..<3 {
            if nums[i][j] == num[j] {
                strikeCount += 1
            }
            else if nums[i].contains(num[j]) {
                ballCount += 1
            }
        }

        if (strike != strikeCount) || (ball != ballCount) {
            deleteNums.append(nums[i])
        }
        
    }

}

deleteNums = Array(Set(deleteNums)) // 지울 배열들의 중복 제거

for delete in deleteNums {
    nums.remove(at: nums.firstIndex(of: delete)!)
}

print(nums.count)

 


백준 Swift 1182번

// MARK: - 1182번
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (N, S) = (input[0], input[1])

let numArray = readLine()!.split(separator: " ").map{Int(String($0))!}

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 sumArray: [Int] = []
for i in 1...N {
    
    for arr in combi(numArray, i) {
        sumArray.append(arr.reduce(0, +))
    }
    
}

let answer = sumArray.filter{$0 == S}.count
print(answer)

 


DAY16 인증완료

 

DAY16 인증완료

반응형