README
Algorithm
๋ฌธ์ ์ ๋ชฉ์ ํด๋ฆญํ๋ฉด, GitHub ์ฝ๋๋ก, โ๏ธ๋ฅผ ํด๋ฆญํ๋ฉด ํฐ์คํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
์ฝ๋ฉํ ์คํธ ์ฐ์ต (๋ฐฑ์ค, ํ๋ก๊ทธ๋๋จธ์ค ๋ฑ) ์๊ณ ๋ฆฌ์ฆ
์์ด (nPr)
์๊ณ ๋ฆฌ์ฆ
์ํ
์์ด
์์๊ฐ ์๋ ์์์ ์งํฉ, n๊ฐ ์ค r๊ฐ๋ฅผ ๋ฝ๋ ๋ฐฉ๋ฒ
var v = [1, 2, 3]
func permutation(n: Int, r: Int, depth: Int) {
if r == depth {
print( v.map { String($0) }.joined(separator: " "))
return
}
for i in depth..<n {
v.swapAt(i, depth)
permutation(n: n, r: r, depth: depth + 1)
v.swapAt(i, depth)
}
return
}
permutation(n: 3, r: 3, depth: 0)
์กฐํฉ
์์๊ฐ ์๋ ์์์ ์งํฉ, n๊ฐ ์ค r๊ฐ๋ฅผ ๋ฝ๋ ๋ฐฉ๋ฒ
์ฌ๊ทํจ์ ์ด์ฉ
var v = [1, 2, 3]
func permutation(n: Int, r: Int, depth: Int) {
if r == depth {
print( v.map { String($0) }.joined(separator: " "))
return
}
for i in depth..<n {
v.swapAt(i, depth)
permutation(n: n, r: r, depth: depth + 1)
v.swapAt(i, depth)
}
return
}
permutation(n: 3, r: 3, depth: 0)
๋ฐ๋ณต๋ฌธ ์ฌ์ฉ
let n = 5, r = 3, a = [1, 2, 3, 4, 5]
// r=3์ด๋ฏ๋ก 3์ค for๋ฌธ -> r์ด ์์ ๋์๋ง ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์
for i in 0..<n {
for j in i+1 ..< i {
for k in j+1 ..< j {
print("\(i), \(j), \(k)
}
}
}
// ์์๋ง ๋ค๋ฅผ ๋ฟ
for i in 0..<n {
for j in 0..<i {
for k in 0..<j {
print("\(i), \(j), \(k)
}
}
}
์ต๋๊ณต์ฝ์
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ด์ฉ
func gcd(_ a: Int, _ b: Int) -> Int {
if b == 0 { return a }
return gcd(b, a%b)
}
์ต์๊ณต๋ฐฐ์
func gcd(_ a: Int, _ b: Int) -> Int {
if b == 0 { return a }
return gcd(b, a%b)
}
func lcm(_ a: Int, _ b: Int) -> Int {
return a * b / gcd(a, b)
}
์์ ์ฐพ๊ธฐ
์๋ผํ ์คํ ๋ค์ค์ ์ฒด(n <= 1,000,000)
func primeNumbers(_ n: Int) -> [Int] {
var numbers = [Bool](repeating: true, count: n+1)
var result = [Int]()
for i in 2...n {
if numbers[i] {
for j in stride(from: i*2, to: n, by: i) {
numbers[j] = false
}
}
}
for i in 2...n {
if numbers[i] { result.append(i) }
}
return result
}
func primeNumbers(_ n: Int) -> Set<Int> {
var numbers = Set(2...n)
for i in 2...n {
if numbers.contains(i) {
numbers.subtract(Set(stride(from: i*2, to: n, by: i)))
}
}
return numbers
}
์ ๊ณฑ๊ทผ ํ์ฉ
func isPrimeNumber(_ n: Int) -> Bool {
if n < 2 { return false }
if n == 2 { return true }
if n % 2 == 0 { return false }
for i in 2...n {
**if !(i * i <= n) { break }**
if n%i == 0 { return false }
}
return true
}
**import Foundation**
func isPrimeNumber(_ n: Int) -> Bool {
if n < 4 { return n >= 2 }
if n % 2 == 0 { return false }
for i in 2...**Int(sqrt(Double(n)))** {
if n % i == 0 { return false }
}
return true
}
๋์ ํฉ
var cards = [0]
var prefix = [0]
let input = readLine()!.split(separator: " ").map { Int($0)! }
let (n, m) = (input[0], input[1])
cards.append(contentsOf: readLine()!.split(separator: " ").map { Int($0)! })
for i in 1...n {
prefix.append(cards[i] + **prefix[i-1]**)
}
for _ in 1...m {
let index = readLine()!.split(separator: " ").map { Int($0)! }
let (a, b) = (index[0], index[1])
print(prefix[b] - prefix[a-1])
}
Swift์ ๋ด์ฅํจ์
print([1, 2, 3, 4, 5, 6].prefix(3))
์๋ฃ๊ตฌ์กฐ
Stack
Swift์ ๋ฐฐ์ด ์์ฒด๋ฅผ Stack์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฒ ์คํธ์ธ๋ฏ! (๊ตณ์ด ๋ง๋ค ํ์ ์์ ๊ฒ ๊ฐ๋ค.)
์ฝ์ ์ญ์ ๋ชจ๋ O(1)
struct Stack<T> {
private var stack: [T] = []
var count: Int {
stack.count
}
var isEmpty: Bool {
stack.isEmpty
}
var peek: T? {
stack.last
}
mutating func push(_ element: T) {
stack.append(element)
}
mutating func pop() -> T? {
stack.popLast()
}
}
Last updated