https://www.acmicpc.net/problem/1654

불러오는 중입니다...

 

 

import Foundation
var highValue = 0
var lowValue = 1
let read = readLine()?.components(separatedBy: " ")
let read_K: Int = Int(read?[0] ?? "") ?? 0
let read_N: Int = Int(read?[1] ?? "") ?? 0
var arr: [Int] = Array<Int>(repeating: 0, count: read_K)
var result: Int = 0
//middle 값으로 개수 만큼 만들 수 있는지 조사.
func possible(middle: Int) -> Bool {
var cnt = 0
for i in 0..<read_K {
cnt += (arr[i] / middle)
}
if cnt >= read_N {
return true
}
return false
}
for i in 0..<read_K {
let readNum = Int(readLine() ?? "") ?? 0
arr[i] = readNum
highValue = max(highValue, readNum)
}
//이분탐색
while lowValue <= highValue {
let mid = (lowValue + highValue) / 2
if possible(middle: mid) {
if result < mid {
result = mid
}
lowValue = mid + 1
} else {
highValue = mid - 1
}
}
print(result)
view raw 1654.swift hosted with ❤ by GitHub

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1337번 올바른 배열 (Swift)  (0) 2020.03.24
BOJ ) 11399번 ATM (Swift)  (0) 2020.02.29
BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24

https://www.acmicpc.net/problem/1337

 

1337번: 올바른 배열

첫째 줄에 배열의 크기 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수이다. 두 개 이상의 원소가 같은 경우는 없다.

www.acmicpc.net

 

import Foundation
let read_N = Int(readLine() ?? "") ?? 0
var arr: [Int] = Array<Int>(repeating: 9987654321, count: 10001)
var arr_index = 0
var cnt = 1
var answer = 1
for i in 0..<read_N {
arr[i] = Int(readLine() ?? "") ?? 0
}
arr.sort()
for i in 1..<read_N {
cnt += 1
while arr[i] - arr[arr_index] > 4 {
cnt -= 1
arr_index += 1
}
answer = max(answer, cnt)
}
if answer > 5 {
answer = 5
}
print(5 - answer)
view raw 1337.swift hosted with ❤ by GitHub

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1654번 랜선 자르기 (Swift)  (0) 2020.03.26
BOJ ) 11399번 ATM (Swift)  (0) 2020.02.29
BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24

https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

아주 간단한 그리디 문제입니다. 

 

 

 

import Foundation
//매우 쉬운 그리디 알고리즘 입니다.
//작은 시간 순서대로 줄을 서서 현금을 인출하면 최소 시간이 됩니다.
let read_N: Int = Int(readLine() ?? "") ?? 0
let read_numbers = readLine()?.components(separatedBy: " ")
var numbers: [Int] = Array<Int>(repeating: 0, count: read_N)
for i in 0..<read_N {
numbers[i] = Int(read_numbers?[i] ?? "") ?? 0
}
//정렬을 사용하여 낮은 숫자가 제일 앞에오도록 합니다.
numbers.sort()
var answer: Int = 0
for i in 0..<numbers.count {
for j in 0...i {
answer += numbers[j]
}
}
print(answer)
view raw 11399.swift hosted with ❤ by GitHub

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1654번 랜선 자르기 (Swift)  (0) 2020.03.26
BOJ ) 1337번 올바른 배열 (Swift)  (0) 2020.03.24
BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

소수에 대한 개념으로 푼 문제 입니다.

 

import Foundation
//소수는 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수.
func solution(number: Int) -> Int {
if number == 1 {
return 0
}else if number == 2 {
return 1
}
//2 이상 자신 미만의 수 중에 나누어 떨어지는 게 있으면 소수가 아니다
for i in 2..<number {
if number % i == 0 {
return 0
}
}
return 1
}
let N: Int = Int(readLine() ?? "") ?? 0
let read_Numbers = readLine()?.components(separatedBy: " ") ?? [""]
var ans: Int = 0
for i in 0..<N {
ans += solution(number: Int(read_Numbers[i]) ?? 0)
}
print(ans)
view raw 1978.cpp hosted with ❤ by GitHub

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1337번 올바른 배열 (Swift)  (0) 2020.03.24
BOJ ) 11399번 ATM (Swift)  (0) 2020.02.29
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24
BOJ ) 9455번 박스 (Swift)  (0) 2020.02.17

https://www.acmicpc.net/problem/1026

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다.

www.acmicpc.net

 

import Foundation
//배열 A의 작은 값과 배열 B의 작은 값을 곱하면 그 합이 최소로 나온다.
func solution(A: [Int], B: [Int], N: Int) -> Int {
var answer: Int = 0
var arr_A = A
var arr_B = B
//A 배열 오름차순 정렬
arr_A.sort()
//B 배열 내림차순 정렬
arr_B.sort(by: >)
for i in 0..<N {
answer += arr_A[i] * arr_B[i]
}
return answer
}
let read_N: String = readLine() ?? ""
let N: Int = Int(read_N) ?? 0
var arr_A: [Int] = Array<Int>(repeating: 0, count: N)
var arr_B: [Int] = Array<Int>(repeating: 0, count: N)
let read_A = readLine()?.components(separatedBy: " ")
let read_B = readLine()?.components(separatedBy: " ")
for i in 0..<N {
arr_A[i] = Int(read_A?[i] ?? "") ?? 0
arr_B[i] = Int(read_B?[i] ?? "") ?? 0
}
let ans = solution(A: arr_A, B: arr_B, N: N)
print(ans)
view raw 1026.swift hosted with ❤ by GitHub

 

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 11399번 ATM (Swift)  (0) 2020.02.29
BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24
BOJ ) 9455번 박스 (Swift)  (0) 2020.02.17
BOJ ) 11403번 경로 (Swift)  (0) 2020.02.17

 

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다.

www.acmicpc.net

 

Binary Search를 사용해서 푸는 수 찾기 문제입니다.

 

import Foundation
func solution(numberArray: [Int], numToFind: Int) -> Int {
//Binary Search!
var left: Int = 0
var right: Int = numberArray.count - 1
while left <= right {
let middle = Int(floor(Double(left + right) / 2.0))
if numberArray[middle] < numToFind {
left = middle + 1
} else if numberArray[middle] > numToFind {
right = middle - 1
} else {
return 1
}
}
return 0
}
let N = Int(readLine() ?? "") ?? 0
var arr: [Int] = Array<Int>(repeating: 0, count: N)
var read = readLine()?.components(separatedBy: " ")
for i in 0..<N {
arr[i] = Int(read?[i] ?? "") ?? 0
}
arr.sort()
let M = Int(readLine() ?? "") ?? 0
read = readLine()?.components(separatedBy: " ")
for i in 0..<M {
let answer = solution(numberArray: arr, numToFind: Int(read?[i] ?? "") ?? 0)
print(answer)
}
view raw 1920.swift hosted with ❤ by GitHub

 

 

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 9455번 박스 (Swift)  (0) 2020.02.17
BOJ ) 11403번 경로 (Swift)  (0) 2020.02.17
BOJ ) 2908번 상수 (Swift)  (0) 2019.11.08

https://www.acmicpc.net/problem/9455

 

9455번: 박스

문제 m행 n열로 이루어진 그리드가 주어진다. 일부 칸에는 박스가 들어 있다. 모든 박스가 더 이상 움직일 수 없을 때 까지 아래로 움직인다면, 박스는 쌓여진 상태가 된다. 그림 (a)의 그리드의 크기는 5행 4열이고, 7칸에는 박스가 들어있다. 모든 박스가 계속해서 아래로 움직이면, 그림 (b)와 같이 변하게 된다. 박스가 움직인 거리는 바닥에 쌓이기 전 까지 이동한 칸의 개수이다. 예를 들어, 맨 왼쪽 열에서 가장 위에 있는 박스가 움직인 거리는 2이

www.acmicpc.net

Queue를 사용하여 풀어보았습니다!

 

import Foundation
struct Queue<T> {
var items: [T] = []
mutating func enqueue(element: T) {
items.append(element)
}
mutating func dequeue() -> T? {
if items.isEmpty {
return nil
}
else {
let firstElement: T? = items.first
items.remove(at: 0)
return firstElement
}
}
mutating func empty() -> Bool {
if items.isEmpty {
return true
}
else {
return false
}
}
}
func solution(box: [[Int]], i: Int, j: Int) -> Int {
var answer: Int = 0
for line in 0..<j {
var q: Queue<Int> = Queue<Int>()
for findZero in (0..<i).reversed() {
if box[findZero][line] == 0 {
q.enqueue(element: findZero)
}
else {
if q.empty() {
continue
} else {
answer += q.dequeue()! - findZero
q.enqueue(element: findZero)
}
}
}
}
return answer
}
let test_case = Int(readLine() ?? "") ?? 0
for _ in 0..<test_case {
let iandj = readLine()?.components(separatedBy: " ")
let i = Int(iandj![0]) ?? 0
let j = Int(iandj![1]) ?? 0
var box_arr: [[Int]] = Array(repeating: Array(repeating: 0, count: j), count: i)
for a in 0..<i {
let read = readLine()?.components(separatedBy: " ")
for b in 0..<j {
box_arr[a][b] = Int(read![b]) ?? 0
}
}
let ans: Int = solution(box: box_arr, i: i, j: j)
print(ans)
}
view raw 9455.swift hosted with ❤ by GitHub

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24
BOJ ) 11403번 경로 (Swift)  (0) 2020.02.17
BOJ ) 2908번 상수 (Swift)  (0) 2019.11.08

https://www.acmicpc.net/problem/11403

 

11403번: 경로 찾기

가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.

www.acmicpc.net

DFS 또는 BFS를 사용해 풀 수 있는 문제입니다.

저는 BFS를 사용해 풀어보았습니다.

 

 

import Foundation
struct Queue<T> {
var items: [T] = []
mutating func enqueue(element: T) {
items.append(element)
}
mutating func dequeue() -> T? {
if items.isEmpty {
return nil
}
else {
let firstElement: T? = items.first
items.remove(at: 0)
return firstElement
}
}
mutating func empty() -> Bool {
if items.isEmpty {
return true
}
else {
return false
}
}
}
func solution (arr: [[Int]], numberOfVertex: Int) -> [[Int]] {
var answer: [[Int]] = Array(repeating: Array(repeating: 0, count: numberOfVertex), count: numberOfVertex)
for i in 0..<numberOfVertex {
var q: Queue<Int> = Queue<Int>()
var visited: [Int] = Array(repeating: 0, count: numberOfVertex)
q.enqueue(element: i)
while !q.empty() {
let from: Int = q.dequeue()!
for j in 0..<numberOfVertex {
if arr[from][j] == 1 && visited[j] == 0 {
q.enqueue(element: j)
visited[j] = 1
answer[i][j] = 1
}
}
}
}
return answer
}
let vertex_num = Int(readLine() ?? "") ?? 0
var arr1: [[Int]] = Array(repeating: (Array(repeating: 0, count: vertex_num)), count: vertex_num)
for i in 0..<vertex_num {
let item = readLine() ?? ""
let v = item.components(separatedBy: " ")
for j in 0..<vertex_num {
arr1[i][j] = Int(v[j]) ?? 0
}
}
let ans: [[Int]] = solution(arr: arr1, numberOfVertex: vertex_num)
for i in 0..<vertex_num {
for j in 0..<vertex_num {
print(ans[i][j] ,terminator: " ")
}
print()
}
view raw 11403.swift hosted with ❤ by GitHub

'Swift > BOJ' 카테고리의 다른 글

BOJ ) 1978번 소수 찾기(Swift)  (0) 2020.02.28
BOJ ) 1026번 보물 (Swift)  (0) 2020.02.28
BOJ ) 1920번 수 찾기 (Swiift)  (0) 2020.02.24
BOJ ) 9455번 박스 (Swift)  (0) 2020.02.17
BOJ ) 2908번 상수 (Swift)  (0) 2019.11.08

+ Recent posts