์ค๋ฒ2์ฌ์ ์ฌ์ด ๋ฌธ์ ์์ง๋ง, ์ ์ค๋ฒ2์ผ? ๋ผ๋ ๋ง์ด ํ๋ฒ ํญ ํ์ด๋์๋ค ใ ใ
์งง์ง๋ง ๊ทธ๋๋ ๊ณ ๋ฏผ์ ์กฐ๊ธ ํ๋ ๋ฌธ์ ๊ธฐ ๋๋ฌธ์ ์์ฑํด๋์!
์ค๋ฒ2๋ต๊ฒ, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฆฌ๋ ๋ต๊ฒ ํ์ด๋ฅผ ์๊ฐํด๋ด๋ ์๊ฐ ๊ทธ๋ฅ ์ด๋ ต์ง๋ ์์๋ค~
โซ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/11501
โซ๏ธ ํ์ด
1๏ธโฃ ์ฒซ๋ฒ์งธ ์๋
์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ์ ์ถ ์๊ฐ ๋ณด๋ฉด 1๋ถ์ ์ด๋ผ๊ณ ๋จ๋๋ฐ ใ ใ 1๋ถ๋์ ์ฒ์ฒํ ์ฑ์ ํ๋๋ 88%์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ์๋ฌด๋๋ ๋ฐ์ดํฐ๊ฐ N์ด 100๋ง๊น์ง ๋ค์ด์ค๋ฉด ๋ป๋๋ ๊ฒ ๊ฐ๋ค.
์๋, ๊ทผ๋ฐ ์ด๊ฑฐ ๊ตฌํํ๋๋ฐ ์๊ทผ ์ค๋๊ฑธ๋ ธ๋ค. ์ผ๋จ ํ์ด๊ณผ์ ์ ์ข ๋ณด์
๊ณ ๋ฏผํ๋ค๊ฐ ์ฐพ์ ์ฒซ๋ฒ์ฌ ํ์ด ๋ฐฉ๋ฒ์ด๋ค. ์ฃผ์์ ํ๊ฐ์ฉ๋ง ์ด ์ ์์ง๋ง ํ๋๊ฑด ๋ง๋๋ก ํ ์ ์๋ค. ์ผ๋จ ๋ช๊ฐ๋ฅผ ๊ฐ๊ณ ์๋ ์ต๊ณ ๊ฐ๊ฒฉ์ผ๋ก ํ๋๊ฒ +1 ์ด๋ผ๋ ์ด๋์ ๋ณด๊ธฐ ๋๋ฌธ์, max๊ฐ์ ์ฐพ์์ฃผ์๊ณ ํ๋จํ๋ค. ๊ทธ๋ฆฌ๊ณ , ๋ง์ฝ max๊ฐ์ด ์ค๊ฐ์ ์๋ค๋ฉด, ๊ทธ ์ดํ์๋ ๋ ์ฃผ์์ ์ด์ง ํ์ง ๊ณ ๋ฏผํด์ผํ๋ค. ๊ทธ๋ ๋ค๋ฉด, ์ง๊ธ ์ฐพ์ max๊ฐ ์ดํ์ ๊ฐ๋ค ์ค์์ ๋ max๊ฐ์ ์ฐพ๊ณ , ํ์์ฃผ๊ณ ... ๐ ๋ฅผ ๋ฐ๋ณตํด์ฃผ๋ฉด ๋์ง ์์๊น?
์ด๋ก ์์ผ๋ก๋, ๋ด๊ฐ ์ํ๋ ๋ต์ ์ฐพ์ ์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ฒฐ๊ตญ max๊ฐ์ ์ฐพ๊ณ ๋ฐฐ์ด์ ์๋ผ์ ๋ ์ดํด๋ณด๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ํํ์๊ณผ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ํ๋จํ๋ค. N์ ์ด 100๋ง๊ฐ๊ฐ ๋ค์ด์ฌ ์ ์์ผ๋ฏ๋ก, ์ ํํ์์ ์๊ฐ๋ณต์ก๋์ธ O(n) ๊ณผ ๋์ผํ ๊ฒ์ด๋ผ๊ณ ํ๋จํ๋ค.
๊ทธ๋์ ๊ตฌํํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
์ฒ์์ ์ฌ๊ท๋ก ๊ตฌํํ๋ค๊ฐ ๊ตฌํ์ด ์๋๊ธธ๋ (๋ด ๋จธ๋ฆฌ์ ํ๊ณ.. ์ ์๋์ง? ใ ใ ใ ใ ์ผ๋จ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ while๋ฌธ์ผ๋ก ๊ตฌํํ๋ค.
import Foundation
func solution() {
let t = Int(readLine()!)!
for _ in 0..<t {
let n = Int(readLine()!)!
var price = readLine()!.split(separator: " ").map{ Int($0)! }
var answer = 0
var idx = 0
while idx < price.count {
if price.count == 1 {
break
}
let maxNum = price.max()!
idx = price.firstIndex(of: maxNum)!
for i in 0..<idx {
if maxNum > price[i] {
answer += maxNum - price[i]
}
}
if idx == price.count - 1 {
break
}
price = Array(price[idx+1..<price.count])
idx = 0
}
print(answer)
}
}
solution()
์.. O(n)์ผ๋ก ๊ตฌํํ๋ค๊ณ ํด๋จ์ง๋ง, ์ผ๋จ๊ฒฐ์ ๊ตฌํ์ ๋ง๊ตฌ์ก์ด๋ก ํ๋ค๋ณด๋ O(n^2)์ผ๋ก ๊ตฌํํด๋์๋๋ผ๊ณ .. ๊ทธ๋์์ธ์ง 100๋ง์ด ๋์ด๊ฐ๋ฉด ๋น์ฐํ ์๊ฐ ์ด๊ณผ๊ฐ ๋๊ฒ ์ง ใ ใ ๋ค๋ฅธ ๊ตฌํ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์์ผํ๋ค.
2๏ธโฃ ๋๋ฒ์ฌ ์๋ - while๋ฌธ์ ์์ ๊ณ ๊ตฌํํ๊ฑด ์๋ ์ฝ๋.
import Foundation
func solution() {
let t = Int(readLine()!)!
for _ in 0..<t {
let n = Int(readLine()!)!
var price = readLine()!.split(separator: " ").map{ Int($0)! }
var answer = 0
var maxNum = price.max()!
for i in 0..<price.count {
if price[i] < maxNum {
answer += maxNum - price[i]
} else if price[i] == maxNum {
if i == price.count - 1 {
break
}
maxNum = Array(price[i+1..<price.count]).max()!
}
}
print(answer)
}
}
solution()
์ ์ด๊ฒ๋, ์ด์ ์ฒซ๋ฒ์จฐ ์ฝ๋์ ๋์ผํ๊ฒ 1๋ถ์ ๋ ์ฑ์ ์ ํ๋๋ 83%์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ใ ใ ใ ใ ์์ค ์ฑ์ ๊ธฐ๋ค๋ฆฌ๋๊ฑฐ ์ฌ์ฅ๋จ๋ ค.. ๊ทธ๋์ ๋ ์ฌ๊ธฐ์ ๋ด๊ฐ ๊ฐ๊ณผํ๊ฒ ํ๋ ์์๋ค. ๋ฐ๋ก,,, Swift ๋ฐฐ์ด์์ max()๊ฐ์ ์ฐพ๋ ๋งค์๋๊ฐ ๋ฐ๋ก O(N)์ด๋ผ๋ ์ฌ์ค. ใ ใ ใ ๊ทธ๋์ ๊ฒฐ๊ตญ ์ด๋ ๊ฒ ํ๋๋ผ๋, n๊ฐ์ for๋ฌธ์ ๋์ง๋ง, for ๋ฌธ ๋ด๋ถ์์ O(N)์ฉ max๊ฐ์ ์ฐพ์์ฃผ๋ฏ๋ก, O(N^2)์ด ๋๋ค ...... ํ....... ์ด๋ ๊ฒ ํธ๋ ๋ฐฉ๋ฒ์ด ์๋๋ ๋ง์ธ๊ฐ ใ ใ
์ง๋๋ฒ์ ์น๊ตฌ๋ ์ด์ผ๊ธฐํ ๋, ์ด๋ ๊ฒ ํ์๋๋ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค๋ฉด, ํ์ด ๊ณผ์ ์์ฒด๊ฐ ์๋ชป ๋๊ฑฐ๋ค ๋ผ๊ณ ์ด์ผ๊ธฐ ๋๋์ ์ด ์๋๋ฐ..ใ ใ ใ ๋ด๊ฐ ํ์ดํ๋ ๋ฐฉ์์ด ์๋ชป๋๋ ์ถ๋ค. ... ํ .. ๋ค์ ๊ณ ๋ฏผํด๋ณด์. ใ ใ ํ ... ์ฌ์ด๋ฌธ์ ์ธ๊ฑฐ๊ฐ์๋ฐ ์ค์ผ ๊ณ ๋ฏผํ๊ณ ์๋๊ฑฐ์ง ;; ์ค๋ฒ2๋ผ๊ณ ๊ณ ์!!!!
์์๋ค. ์์๋ค. ์์๋ค!! ๋ด๊ฐ ํผ ๋ฐฉ์์ ํ๋ฆฌ์ง ์์๊ณ , ๊ตฌํํ๋๋ฐ์ ์กฐ๊ธ ๋ ๊ณ ๋ฏผ์ด ํ์ํ๋ค. ์ฃผ์ด์ง ์ฃผ์์ ๊ฐ๊ฒฉ (๋ด๊ฐ price๋ผ๊ณ ๋ณ์ ๋ง๋ค์ด๋์๊ฒ)์ ์์๋ ๋ฐ๋์ง ์๋๋ค. ๊ฒฐ๊ตญ, ์ต๋ ์ด์ต์ ์ป๊ธฐ ์ํด์๋, ๋ค์์๋ ์ซ์๊ฐ ์ปค์ผ, ํ์์ ์์ต์ ๋จ๊ธธ ์ ์๋ค. ์ฆ, ๋ฐฐ์ด์ ๊ฑฐ๊พธ๋ก ๋ณด๋ ๊ฒ์ด๋ค. ํ์ฌ -> ๊ณผ๊ฑฐ๋ก ๋์๊ฐ๋ค๊ณ ์๊ฐํ๊ณ , ํ์ฌ max๊ฐ n์์ด๋ผ๋ฉด, ์์์๋์ ๋ฅผ ์ฌ๊ณ ํ๋๊ฒ ์ด๋์ธ๊ฐ?๋ฅผ ์๊ฐํด๋ณด์.
์ด ๊ณผ์ ์ ๋งจ ๋ค๋ถํฐ ์๊น์ง ๋ฐ๋ณตํด๋ณด์. ๊ทธ๋ ๋ค๋ฉด, max๊ฐ์ max()!๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ฐพ์์ค ํ์๋ ์๊ณ , ๊ทธ๋ฅ ํ๋์ for๋ฌธ์ผ๋ก if๋ฌธ๋ง์ ์ฌ์ฉํด์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, O(N)์ ์๊ฐ๋ณต์ก๋๋ก ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค
3๏ธโฃ ์ธ๋ฒ์งธ ์๋
์ ๊ทธ๋ฆผ์ ๊ทธ๋๋ก ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ๋ค.
import Foundation
func solution() {
let t = Int(readLine()!)!
for _ in 0..<t {
let n = Int(readLine()!)!
var price = readLine()!.split(separator: " ").map{ Int($0)! }
var answer = 0
var maxNum = price[price.count-1] // max์ด๊ธฐ๊ฐ ๊ทธ๋ฅ ๋งจ๋ค ๊ฐ์ผ๋ก
for i in stride(from: price.count-1, through: 0, by: -1) {
if maxNum < price[i] { // maxnum๋ณด๋ค ํฐ๋์ ๋ฐ๊ฒฌํ๋ค๋ฉด max๋ฅผ ๊ฐฑ์ ํด์ค
maxNum = price[i]
} else if price[i] < maxNum {
answer += maxNum - price[i]
}
}
print(answer)
}
}
solution()
์ง์~~ ๋ง์๋ค ํ,,, ์ด ๋ฌธ์ ํธ๋๋ฐ ํ์๊ฐ ๋ฐ์ ๋? ๊ฑธ๋ฆฐ๊ฒ ๊ฐ๋ค. ์ญ์, ํ์ด๊ฐ ์๊ฐ๋ฌ๋๋ฐ, ๊ตฌํ์ด ์ด๋ ค์ฐ๋ฉด ์ง์ง ,,,, ์ฐพ๊ธฐ๋ ํ๋ค๊ณ ๊ทธ๋ ๋ค ใ ใ ์ค๊ฐ์ index๋ฌธ์ ๋ก ์์ฒญ ํท๊ฐ๋ ค์ ํค๋งค๊ธฐ๋ ํ๊ณ , ์ฌ๊ท๋ก ๊ตฌํํ๋ค๊ฐ ์ด์ฉ๊ณ ์ ์ฉ๊ณ ํ๋ฉด์ ํํ์น ์ฝ๋๋ ๋ง์๋ค. ์์ง,, ๊ตฌํ์ค๋ ฅ์ด ๋ง์ด ๋ถ์กฑํ ๊ฒ ๊ฐ๋ค ใ ใ
๋ ์ด์ฌํ ํ์ด์ผ๊ฒ ๋ค. ์์์์..... ์ค๋ฒ2์ฃผ์ ์ ๋์๊ฒ ๋ง์ ๊ณ ๋ฏผ์ ํ๊ฒ ํ๋ค ...... ํ... ๋ฐฐ์ด์ ๊ฑฐ๊พธ๋ก ๋๋ ค์ ์๊ฐ๋ณต์ก๋๊ฐ ํ!! ์ค์ด๋๋ ํ์ด๊ฐ ์๊ฐ๋ณด๋ค ๋ง์ ๊ฒ ๊ฐ์ผ๋๊น, ์ ์๊ฐํด๋์.