λ°±μ€€ - ν•œ μ€„λ‘œ μ„œκΈ°(Swift)

2022. 11. 11. 18:38ㆍAlgorithm

λ°±μ€€ - ν•œ μ€„λ‘œ μ„œκΈ°(Swift)

 

 

 λ¬Έμ œ μ„€λͺ…

 

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

 

 λ‚˜μ˜ 풀이

 

λ¬Έμ œμ—μ„œ 주어진 μˆ˜λ“€μ„ 이미 μ •λ ¬λœ μƒνƒœμ˜ μˆ˜λ“€μ΄λ‹€.

즉 1번~Nλ²ˆκΉŒμ§€ ν‚€κ°€ μˆœμ„œλŒ€λ‘œ μžˆλŠ” 것이닀.

 

κ·Έ μƒνƒœμ—μ„œ μžμ‹ μ˜ μ™Όμͺ½μ— λͺ‡λͺ…이 μžˆλŠ”μ§€λ₯Ό κ΅¬ν•˜λŠ” 문제인데, μ΄λŠ” 곡백을 μ²΄ν¬ν•˜λ©΄μ„œ ν•΄κ²°ν•  수 μžˆλ‹€.

예λ₯Όλ“€μ–΄ 2 1 1 0의 순으둜 μž…λ ₯이 λ“€μ–΄μ™”μ„λ•Œ,

첫번째 μ‚¬λžŒμ€ μ•žμ— 두λͺ…이 μžˆλ‹€. μ΄λŠ” _ _ 1 _ 의 ν˜•νƒœκ°€ λ˜λŠ” 것이닀. 

λ‘λ²ˆμ§Έ μ‚¬λžŒμ€ μ•žμ— ν•œλͺ…이 μžˆκΈ°μ— _ 2 1 _ κ°€λ˜κ³ ,

μ„Έλ²ˆμ§Έ μ‚¬λžŒμ€ μ•žμ— ν•œλͺ…이 있기 λ•Œλ¬Έμ— _ 2 1 3이 λœλ‹€.

즉 λ“€μ–΄μ˜€λŠ” μˆ«μžλŠ” μ•žμ˜ 곡백의 개수라고 생각할 수 μžˆλ‹€. 

 

이λ₯Ό μ½”λ“œλ‘œ ν’€μ–΄λ‚΄λ©΄ 곡백을 λ§ˆμ£ΌμΉ λ•Œ 더 이상 μ•žμ— 더 큰 μˆ«μžκ°€ 있으면 μ•ˆλœλ‹€λ©΄ 값을 μ§€μ •ν•˜κ³ , 곡백을 λ§ˆμ£ΌμΉ λ•Œ μ•žμ— 더 큰 μˆ«μžκ°€ μžˆμ–΄μ•Όν•œλ‹€λ©΄ 카운트만 μ€„μ—¬μ£ΌλŠ” 것이닀. 그리고 이미 μ§€μ •λœ 값을 λ§Œλ‚˜λ©΄ 뒀에 μž…λ ₯λ°›λŠ” 값듀은 μ΅œμ†Œν•œ 이 κ°’λ³΄λ‹€λŠ” 크기 λ•Œλ¬Έμ— cntλ₯Ό κ±΄λ“œλ¦¬μ§€μ•Šκ³  λ„˜κ²¨μ£ΌκΈ°λ§Œ ν•˜λ©΄ λœλ‹€.

 

 

import Foundation

let n = Int(readLine()!)!
let arr = readLine()!.components(separatedBy:" ").map{Int($0)!}
var visited = [Int](repeating: 0, count: n)

for (i, x) in arr.enumerated() {
    var cnt = x
    for j in 0..<arr.count {
        if visited[j] == 0 && cnt == 0 { // κ³΅λ°±μ΄λ©΄μ„œ 더 이상 μ•žμ— 큰 것이 μ—†μ„λ•Œ κ³ μ •
            visited[j] = i+1 
            break
        } else if visited[j] == 0 { // κ³΅λ°±μ΄μ§€λ§Œ μ•žμ— 더 큰 μˆ«μžκ°€ μžˆμ„λ•Œ 더 큰 μˆ«μžκ°€ λͺ‡κ°œμΈμ§€λ₯Ό μ•Œλ €μ£ΌλŠ” λ³€μˆ˜μ˜ 수만 쀄여쀀닀.
            cnt -= 1
        } else { // μˆ«μžκ°€ 이미 λ°°μ •λ˜μ–΄μžˆμ„λ•Œ μ§€λ‚˜μΉœλ‹€.
            continue 
        }
    }
}

print(visited.map{String($0)}.joined(separator:" "))