MUKER_DEV with iOS

[swift] λ°±μ€€ - 1920번: 수 μ°ΎκΈ° λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 1920번: 수 μ°ΎκΈ°

MUKER 2023. 2. 13. 16:00
 

1920번: 수 찾기

첫째 쀄에 μžμ—°μˆ˜ N(1 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M(1 ≤ M ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M개의 μˆ˜λ“€μ΄ μ£Όμ–΄μ§€λŠ”λ°, 이 μˆ˜λ“€

www.acmicpc.net

문제 ν‘ΈλŠ” 데 μžˆμ–΄ 도움이 λ˜λ„λ‘ λ‚˜μ˜ 풀이와 κ°œμ„ λœ 풀이λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€.
λ˜ν•œ 풀이 ν›„ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ°Έκ³ ν• λ§Œν•œ 풀이도 μ˜¬λ¦½λ‹ˆλ‹€.

- λ¬Έμ œμ— 따라 λ‚˜μ˜ ν’€μ΄λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•΄λ‹Ή 풀이듀은 풀이 쀑 ν•˜λ‚˜μΌ 뿐 μ΅œμ„ μ˜ ν’€μ΄λŠ” 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 


 

문제 μ„€λͺ…

 

- μ‹œκ°„μ œν•œ μ•ˆμ— ν•΄λ‹Ήν•˜λŠ”λ¬Έμž(숫자)κ°€ 배열에 ν¬ν•¨ν•˜λŠ”μ§€ νƒμƒ‰ν•˜λΌ.

 


 

λ‚˜μ˜ 풀이

import Foundation

func binarySearch(_ array: [Int], _ value: Int) -> Int? {
    guard !array.isEmpty else { return nil }
    
    var left = 0
    var right = array.count - 1
    
    while left <= right {
        let middleIndex = (left + right) / 2
        let middleValue = array[middleIndex]
        
        if middleValue > value {
            right = middleIndex - 1
        }
        if middleValue < value {
            left = middleIndex + 1
        }
        if middleValue == value {
            return middleIndex
        }
    }
    return nil
}

let N = Int(readLine()!)!
let A = readLine()!.split(separator: " ").map { Int($0)! }.sorted()
let M = Int(readLine()!)!
let B = readLine()!.split(separator: " ").map { Int($0)! }

for i in B { binarySearch(A, i) == nil ? print(0) : print(1) }

 

- 이진탐색을 톡해 μ‹œκ°„μ œν•œμ„ 톡과할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

-μ•½ 200~250ms

 


 

 

μ°Έκ³ ν• λ§Œν•œ 풀이

import Foundation

let N = Int(readLine()!)!
let A = Set(readLine()!.split(separator: " ").map { Int(String($0))! })
let M = Int(readLine()!)!
let B = readLine()!.split(separator: " ").map { Int(String($0))! }
var result = ""

for i in B { result += A.contains(i) ? "1\n" : "0\n" }
print(result)

 

- μ€‘μ²©λ˜λŠ” μˆ«μžκ°€ λ§Žμ€μ§€ Set을 톡해

μ‹œκ°„μ œν•œ μ•ˆμ— ν’€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

- λ‚˜μ˜ 풀이보닀 κ°„κ²°ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.

 

- μ‚Όν•­ μ—°μ‚°μžλ‘œ κ²°κ³Όλ₯Ό λ°”λ‘œ 좜λ ₯ν•˜λŠ”κ±° 보닀

κ²°κ³Όλ₯Ό 좜λ ₯ν•  빈 λ¬Έμžμ—΄μ„ ν•˜λ‚˜ λ§Œλ“€μ–΄ 놓고

printν•  λ¬Έμžλ“€μ„ μΆ”κ°€ν•˜μ—¬

ν•œλ²ˆμ— 좜λ ₯ν•˜λ‹ˆ μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚¬ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

- μ•½ 150ms