๐Ÿ‘พ
Algorithm
๊ธฐ์ดˆ ๊ฐœ๋…GitHubBeakjoon
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…
    • Dynamic Programming
    • ์ˆ˜ํ•™ ๊ณต์‹
    • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
    • Sorting
    • ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Beakjoon
    • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      • ๐Ÿฅ‡[๊ทธ๋ž˜ํ”„] Gold
      • ๐Ÿฅˆ[๊ทธ๋ž˜ํ”„] Silver
    • ์™„์ „ํƒ์ƒ‰
      • ๐Ÿฅ‰[์™„์ „ ํƒ์ƒ‰] Bronze
      • ๐Ÿฅˆ[์™„์ „ ํƒ์ƒ‰] Silver
    • Dynamic Programming
      • ๐Ÿฅˆ[DP] Silver
    • Presum (๋ˆ„์ ํ•ฉ)
      • ๐Ÿผ[๋ˆ„์  ํ•ฉ] Silver
    • ๋‹จ๊ณ„๋ณ„๋กœ ํ’€๊ธฐ
      • [1๋‹จ๊ณ„] ์ž…์ถœ๋ ฅ๊ณผ ์‚ฌ์น™์—ฐ์‚ฐ
  • Programmers
  • ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค
  • README
Powered by GitBook
On this page
  • Algorithm
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ˆ˜ํ•™
  • ์ž๋ฃŒ๊ตฌ์กฐ
  • Stack

README

Previous์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค

Last updated 2 years ago

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๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๋ฐฉ๋ฒ•

  1. ์žฌ๊ท€ํ•จ์ˆ˜ ์ด์šฉ

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)
  1. ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ

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)
}

์†Œ์ˆ˜ ์ฐพ๊ธฐ

  1. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด(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
}
  1. ์ œ๊ณฑ๊ทผ ํ™œ์šฉ

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()
    }
}
์•Œ๊ณ ๋ฆฌ์ฆ˜
์ˆ˜ํ•™
์ž๋ฃŒ๊ตฌ์กฐ
Stack