๋ฌธ์ ์ค๋ช
๋์์๋ N๊ฐ์ ๋น๋ฉ์ด ์๋ค.
๋น๋ฉ ๊ด๋ฆฌ์ธ๋ค์ ๋งค์ฐ ์ฑ์ค ํ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ ๋ฒค์น๋งํน ํ๊ณ ์ถ์ดํ๋ค.
i๋ฒ์งธ ๋น๋ฉ์ ํค๊ฐ hi์ด๊ณ , ๋ชจ๋ ๋น๋ฉ์ ์ผ๋ ฌ๋ก ์ ์๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก๋ง ๋ณผ ์ ์๋ค.
i๋ฒ์งธ ๋น๋ฉ ๊ด๋ฆฌ์ธ์ด ๋ณผ ์ ์๋ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ i+1, i+2, .... , N์ด๋ค.
๊ทธ๋ฐ๋ฐ ์์ ์ด ์์นํ ๋น๋ฉ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ๋น๋ฉ์ด ์์ผ๋ฉด ๊ทธ ๋ค์์ ์๋ ๋ชจ๋ ๋น๋ฉ์ ์ฅ์์ ๋ณด์ง ๋ชปํ๋ค.
์) N=6, H = {10, 3, 7, 4, 12, 2}์ธ ๊ฒฝ์ฐ
- 1๋ฒ ๊ด๋ฆฌ์ธ์ 2, 3, 4๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 2๋ฒ ๊ด๋ฆฌ์ธ์ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 3๋ฒ ๊ด๋ฆฌ์ธ์ 4๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 4๋ฒ ๊ด๋ฆฌ์ธ์ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 5๋ฒ ๊ด๋ฆฌ์ธ์ 6๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 6๋ฒ ๊ด๋ฆฌ์ธ์ ๋ง์ง๋ง์ด๋ฏ๋ก ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ผ์, ๊ด๋ฆฌ์ธ๋ค์ด ์ฅ์์ ์์ ํ์ธํ ์ ์๋ ์ด ์๋ 3 + 0 + 1 + 0 + 1 + 0 = 5์ด๋ค.
์ ๋ ฅ
- ์ฒซ ๋ฒ์งธ ์ค์ ๋น๋ฉ์ ๊ฐ์ N์ด ์ ๋ ฅ๋๋ค.(1 ≤ N ≤ 80,000)
- ๋ ๋ฒ์งธ ์ค ๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง ๊ฐ ๋น๋ฉ์ ๋์ด๊ฐ hi ์ ๋ ฅ๋๋ค. (1 ≤ hi ≤ 1,000,000,000)
์ถ๋ ฅ
- ๊ฐ ๊ด๋ฆฌ์ธ๋ค์ด ๋ฒค์น๋งํน์ด ๊ฐ๋ฅํ ๋น๋ฉ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
6
10
3
7
4
12
2
์ถ๋ ฅ
5
๋ด ๋ฌธ์ ํ์ด
import Foundation
let count = Int(readLine()!)!
var result = 0
var stack = [Int]()
for i in 0..<count {
let h = Int(readLine()!)!
// ์คํ์ด ๋น์์ ๋ (๊ฐ์ฅ ์ฒซ ์ฅ์ ๋์ด ์ฝ์
์ ์ํจ)
if stack.isEmpty {
stack.append(h)
}
// ์คํ์ด ๋น์ด์์ง ์์ ๋
else {
// ๋ง์ฝ ์คํ์ ๋ง์ง๋ง ์ฅ์ ๋์ด๊ฐ ํ์ฌ ์
๋ ฅ๋ ๋์ด๋ณด๋ค ๋์ ๋
if stack[stack.count-1] > h {
stack.append(h)
}
// ๋ง์ฝ ์คํ์ ๋ง์ง๋ง ์ฅ์ ๋์ด๊ฐ ํ์ฌ ์
๋ ฅ๋ ๋์ด๋ณด๋ค ๋ฎ์ ๋
else {
while stack[stack.count-1] <= h {
stack.removeLast()
result += stack.count
if stack.isEmpty { break }
}
stack.append(h)
}
}
// ๋ง์ง๋ง ์๊ฐ ์
๋ ฅ, ์์ ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋ stack์ ๊ธธ์ด๊ฐ 1 ์ด์์ผ ๊ฒฝ์ฐ
if i == count-1 && stack.count > 1 {
for _ in 0..<stack.count-1 {
stack.removeLast()
result += stack.count
}
}
}
print(result)
(์ด ๋ฌธ์ ๋ #2493๋ฒ ํ ๋ฌธ์ ์ ์ ๋ง ์ ์ฌํ๋ฏ๋ก, ํจ๊ป ํ์ด๋ณด์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.)
ํ์ด๋ฅผ ๋์ดํ๊ธฐ ์ , ๋ด๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋ณด๋ ์์ ์ ๋ํด ์ค๋ช
ํ๋ค.
ํด๋น ๋ฌธ์ ์ค๋ช
์์๋ ํ ์ฅ์์ด ๊ด์ฐฐ ๊ฐ๋ฅํ ์ฅ์์ ์๋ค์ ํฉ์ ๊ตฌํ๋ผ ํ์์ง๋ง,
๋๋ ํ ์ฅ์๋ง๋ค ๊ด์ฐฐ ๊ฐ๋ฅํ ๋ค๋ฅธ ์ฅ์๋ค์ ํฉ์ ๊ตฌํ๋ ๊ฒ์ผ๋ก, ์ญ์ผ๋ก ํ์ดํ๋ค.
- ๋งจ ์ฒ์ ์ ๋ ฅ๋๋ ์ฅ์ ๋์ด์ ์คํ push๋ฅผ ์ํด isEmpty๋ฅผ ์ด์ฉํด์ฃผ์๋ค.
- ๋ ๋ฒ์งธ ์ ๋ ฅ๋๋ ์ฅ์๋ถํฐ๋ ์คํ์ ์กด์ฌํ๋ ๋ง์ง๋ง ์์์ ๋์ด๋ฅผ ๋น๊ตํ๋ค.
- ํ ์ฅ์์ด ์คํ์ ๋ง์ง๋ง ์์๋ณด๋ค ๋ฎ๋ค๋ ๊ฒ
== ์คํ ๋ง์ง๋ง ์์์ ํด๋นํ๋ ์ฅ์์ ์์ ๊ฐ๋ฆฌ์ง ์์.
&& ์ด ์ฅ์ ๋ํ ์์ผ๋ก ์ ๋ ฅ๋ ์ฅ์ ์ค ๊ด์ฐฐ ๊ฐ๋ฅํ ์ฅ์ ์กด์ฌ ๊ฐ๋ฅ์ฑ ์์.
๋ฐ๋ผ์, ์ด ๋๋ result์ ๊ฐ์๋ฅผ ๋์ ํ์ง ์๊ณ ์คํ์ ํด๋น ์ฅ์์ ๋์ด๋ฅผ ์ถ๊ฐํด์ฃผ๊ธฐ๋ง ํ๋ค. - ํ ์ฅ์์ด ์คํ์ ๋ง์ง๋ง ์์๋ณด๋ค ๋๋ค๋ ๊ฒ
== ์ด ์ฅ์์ด ์คํ ๋ง์ง๋ง ์์ ์ฅ์์ ์์ ๊ฐ๋ฆผ.
&& ์ด ์ฅ์์ ์์ผ๋ก ์ ๋ ฅ๋ ์ฅ์ ์ค ๊ด์ฐฐ ๊ฐ๋ฅํ ์ฅ์ ์กด์ฌ ๊ฐ๋ฅ์ฑ ์์.
๋ฐ๋ผ์, ์ด ๋๋ ์คํ์ ์ ๋ ฅ๋์ด์๋ ์ฅ์ ์ค ๋์ด์ ์๋ก์ด ์ฅ์ ๊ด์ฐฐ์ด ๋ถ๊ฐํ ์ฅ์๋ค์ ์ญ์ ํ๊ณ ,
์ญ์ ๋๋ ์ฅ์๋ค์ ์๊ธฐ ์์ ์ ๊ด์ฐฐํ ์ฅ์์ด ๋ช๊ฐ์ธ์ง ์ธ์ด์ฃผ๋ ์ญํ ์ ๋ฐ๋ณต๋ฌธ์ ๋ง๋ค์ด์ฃผ์๋ค. - ๋ฐ๋ณต๋ฌธ์ ์คํ์ ๋ง์ง๋ง ์์ ์ฅ์์ด ํ ์
๋ ฅ ์ฅ์๋ณด๋ค ๋ฎ์๋์ ์ํํ๊ฒ ํ๊ณ ,
removeLast๋ฅผ ์ด์ฉํ์ฌ ์คํ์ ๋ง์ง๋ง ์ฅ์์ ํ๋์ฉ ์ญ์ ํ๋ค. - result์๋ ์ญ์ ๋ ์ฅ์์ ๊ด์ฐฐํ ์ฅ์์ ๊ฐ์๋ฅผ ๋์ ํด์ค์ผํ๋๋ฐ,
๋ฐ๋ผ์ ํด๋น ์ฅ์์ ์ญ์ ํ๊ณ ๋จ์ ์คํ์ ์ฅ์ ๊ฐ์๋ฅผ result์ ๋ํด์ฃผ์๋ค.
(ํด๋น ์ฅ์๋ณด๋ค ๋ฎ๊ฑฐ๋ ์ค๊ฐ์ ๊ฐ๋ ค์ ธ ๊ด์ฐฐํ์ง ๋ชปํ ์ฅ์์ ์ด๋ฏธ ์คํ์์ ์ญ์ ๋๊ธฐ ๋๋ฌธ.) - ๊ทธ๋ฆฌ๊ณ ํ ์
๋ ฅ ์ฅ์์ด ์ฅ์ ์ค ๊ฐ์ฅ ๋์ ์ฅ์์ผ ๊ฒฝ์ฐ, ์คํ์ ์ฅ์์ ๋ชจ๋ ์ญ์ ํด๋ฒ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์
์คํ์ด ๋น๊ฒ ๋ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋๋ก ํด์ฃผ์๋ค. - ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด ์คํ์ ํ ์ฅ์ ๋์ด๋ฅผ ์ถ๊ฐํ๋ค.
- ๋ง์ง๋ง ์ฅ์์ด ์
๋ ฅ๋ ๊ฒฝ์ฐ์๋, ์คํ์ ๊ธธ์ด๋ฅผ ํ์ธํด์ฃผ์ด 1๋ณด๋ค ํด ๊ฒฝ์ฐ
์คํ ๊ธธ์ด๋งํผ ์ while๋ฌธ๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋ฐ๋ณต๋ฌธ์ ์์ฑํด์ฃผ์๋ค.
(๋ง์ง๋ง ์ฅ์์ด ์ ๋ ฅ๋๊ณ , ์ฐ์ฐ์ ๋ชจ๋ ์ํํ๋๋ฐ๋ ์คํ์ ๊ธธ์ด๊ฐ 1๋ณด๋ค ํฌ๋ค๋ ๊ฒ์
ํ์ฌ ์คํ์ ๋จ์ ์ฅ์๋ค์ ๊ด์ฐฐ ๊ฐ์๊ฐ ์ธก์ ๋์ง ์์๋ค๋ ๋ป์ด๋ฏ๋ก.
ex) ๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ ์ ๊ฒฝ์ฐ ๋ง์ง๋ง์ [12, 2] ์คํ์ด ๋จ๊ฒ๋๋ค.
2๋ 12๋ณด๋ค ์๊ธฐ๋๋ฌธ์ ์คํ์ ์ถ๊ฐ๋ง๋๊ณ ๊ฒฐ๊ณผ์ ๋์ ๋์ง์๋๋ค.)
๐ก ํผ๋๋ฐฑ
- ๋ฐ๋ก ์ด์ ์ ํ์๋ ๋ฌธ์ ์ ๋๋ฌด ๋น์ทํ์ฌ ๊ธ๋ฐฉ ํ ์ ์์๋ค.
- ์ด๋ฐ ํ์ด ๋ฐฉ๋ฒ์ ๋ณต์ตํ๊ฒ ๋๊ณ , ํ์คํ ์ดํดํ๊ฒ๋์ด ์์ผ๋ก๋ ํ์ฉ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค.
- ๊ฒฐ๊ณผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ด ๋ง์ด ํ์ํ๋ค๊ณ ๋์์,, ์ฝ๋ ๊ฐ์ ์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๊ดํธ BOJ #9012 (0) | 2021.08.07 |
---|---|
[Swift Algorithm] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ Programmers(Lv.2) (0) | 2021.08.06 |
[Swift Algorithm] ํ BOJ #2493 (0) | 2021.08.04 |
[Swift Algorithm] ์คํ ์์ด BOJ #1874 (2) | 2021.08.04 |
[Swift Algorithm] ์ ๋ก BOJ #10773 (0) | 2021.08.04 |
๋๊ธ