๋ฌธ์ ์ค๋ช
ํฌ๊ธฐ๊ฐ N์ธ ์์ด A = A1, A2, ..., AN์ด ์๋ค. ์์ด์ ๊ฐ ์์ Ai์ ๋ํด์ ์คํฐ์ NGE(i)๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค. Ai์ ์คํฐ์๋ ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ Ai๋ณด๋ค ํฐ ์ ์ค์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฌํ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์คํฐ์๋ -1์ด๋ค.
์๋ฅผ ๋ค์ด, A = [3, 5, 2, 7]์ธ ๊ฒฝ์ฐ NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1์ด๋ค. A = [9, 5, 4, 8]์ธ ๊ฒฝ์ฐ์๋ NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ์์ด A์ ์์ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด N๊ฐ์ ์ NGE(1), NGE(2), ..., NGE(N)์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ1
4
3 5 2 7
์ถ๋ ฅ1
5 7 7 -1
์ ๋ ฅ2
4
9 5 4 8
์ถ๋ ฅ2
-1 8 8 -1
๋ด ๋ฌธ์ ํ์ด
import Foundation
var count = Int(readLine()!)!
var nums = readLine()!.split(separator: " ").map({Int(String($0))!})
var stack = [[0, nums[0]]]
var answer = Array(repeating: "-1", count: count)
for i in 1..<nums.count {
while !stack.isEmpty && nums[i] > stack.last![1] {
answer[stack.removeLast()[0]] = "\(nums[i])"
}
stack.append([i, nums[i]])
}
print(answer.joined(separator: " "))
- ์คํ, LIFO๋ก ํ์ดํ๋ค.
- nums ๋ฐฐ์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ ์
๋ ฅ ์ซ์๋ค์ ๋ฃ์ด์ฃผ์๊ณ ,
์ธ๋ฑ์ค์ nums๊ฐ์ ์์ผ๋ก ๊ฐ๋ stack ๋ฐฐ์ด์ ์์ฑํ๋ค. - ์คํฐ์๋ฅผ ์ฐพ์ง ๋ชปํ ์๋ -1๋ก ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ -1๋ก ์ฑ์ด ๋ฐฐ์ด์ ๋ง๋ค์๋ค.
- for๋ฌธ ์์ ์ , ๋ฏธ๋ฆฌ nums ์ฒซ ๋ฒ์งธ ์๋ฅผ stack์ ๋ฃ์๊ณ , for๋ฌธ์ 1๋ถํฐ ์์ํ๋ค.
- ์คํ์ด ๋น์ด์์ง ์์ผ๋ฉฐ, ์คํ์ ๋ง์ง๋ง ์์๊ฐ ํ์ฌ ์ ๋ ฅ๋ nums ๊ฐ๋ณด๋ค ์์ ๋ ๋ฐ๋ณต์ ์ํํ๋ค.
- stack์ ๋ง์ง๋ง ์์๋ฅผ ์ญ์ ํจ๊ณผ ๋์์ ์ญ์ ๋ ์์ ์ธ๋ฑ์ค๋ฅผ answer๋ฐฐ์ด์ ์์น๋ก ์ฌ์ฉํ๋ค.
์๋ ์์ธํ ํ์ด ๊ณผ์ ์ ์ฒจ๋ถํ๋ค.
โ
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋นจ๋ฆฌ๋ ํ์๋๋ฐ,, ์๊พธ ์๊ฐ์ด๊ณผ๊ฐ ๋์ ์ ๋จน์๋ค.
๊ทผ๋ฐ ๊ทธ ์ด์ ๊ฐ ๋จ์ง spilt ๋์ components๋ฅผ ์จ์,, ๊ทธ๋ฐ๊ฑฐ์๋ค.
split์ด components๋ณด๋ค ์๊ฐ์ ๋์ก์๋จน๊ณ , ์ฑ๋ฅ์ด ์ข๋ค๊ณ ํ๋ค.
์ง๊ธ๊น์ง๋ ์ด๊ฑธ ๋ชฐ๋๊ณ , components๊ฐ [String]์ผ๋ก ๋ฐํํด์ฃผ๋๊ฒ
์ฌ์ฉํ๊ธฐ ํธํด์ ๋งจ๋ components๋ก ์ฌ์ฉํ๋๋ฐ, ์์ผ๋ก๋ ์ฌ๋งํ๋ฉด split์ผ๋ก ์ฌ์ฉํด์ผ๊ฒ ๋ค.
(split๊ณผ components ๋น๊ต! ์๊ธฐ๐)
2021.08.08 - [๐ Swift Note/๐ ๊ฐ๋ ์ ๋ฆฌ] - [Swift] split๊ณผ components์ ์ฐจ์ด์
๐ก ํผ๋๋ฐฑ
- ์์ง๋ swift ์ธ์ด์ ๋ํ ์ดํด๋๊ฐ ๋ถ์กฑํ๊ฐ๋ณด๋น ใ ์ฑ ์ข ๋ ์ฝ์!~
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๋์ 0 BOJ #11047 (0) | 2021.08.13 |
---|---|
[Swift Algorithm] ์นด๋2 BOJ #2164 (0) | 2021.08.13 |
[Swift Algorithm] ๊ท ํ์กํ ์ธ์ BOJ #4949 (0) | 2021.08.07 |
[Swift Algorithm] ๊ดํธ BOJ #9012 (0) | 2021.08.07 |
[Swift Algorithm] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ Programmers(Lv.2) (0) | 2021.08.06 |
๋๊ธ