오늘은 못 풀었던 문제를 다시 푸는 날 입니다.
하지만 특별히 못 풀었던 문제는 없어서, 임의로 약 15문제를 푸려고 합니다. (실버2 ~ 브론즈3 예상)
22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.
https://developer-p.tistory.com/171
아래 깃허브 주소에서 백준 Swift 문제풀이를 확인하실 수 있습니다.
https://github.com/SuminPark-developer/BaekJoonPS
Day 16
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번
// 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
// 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 인증완료
반응형
최근댓글