2022. 11. 8. 10:27ใAlgorithm
๋ฐฑ์ค - ์ฃผ์(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/11501
๋์ ํ์ด
์ด ๋ฌธ์ ๋ฅผ ํ ๋ ๊ฐ๊ณผํ๋ ๊ฒ ๋ ๊ฐ์ง ์๋ค.
1. ์์์๋ถํฐ ํ์ํ๋ฉด์ ์ฃผ์์ ๊ฐ์ด ๋จ์ด์ง๋ ์์ ์์ ๊ตฌ์ ํ ๊ฑธ ๋ค ํ๋ ๊ฒ์ ๊ทธ๋ฆฌ๋๋ก ์ฑํํ ์ .
2. ์ ๋ ฅ์ด 100,000์ด์์ธ๋ฐ readLine์ ์ฌ์ฉํ๋ ค ํ๋ค๋ ์ .
์ด ๋ ๊ฐ์ง๊ฐ ํ์ด๋ฅผ ์กฐ๊ธ ๋๋ฆฌ๊ฒํ๋ค.
๋ณดํต ์ด๋ฐ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ ์ ์ธ๋ฑ์ค์ ๋ค ์ธ๋ฑ์ค๋ง ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋๋ผ max๊ฐ์ ์ค์ ํด๋๊ณ max์๋ฐ๋ผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค. ์ด ๋ฌธ์ ๋ ๊ทธ๋ ๋ค.
์๋ฅผ ๋ค์ด
1 1 3 1 4 2๋ผ๋ ์ ๋ ฅ๊ฐ์ด ์ฃผ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ฒ์ ๋์ ๋ ผ๋ฆฌ๋ผ๋ฉด 3์์ 1์ด๋๋ ์์ ์์ ์์ ์ฐ ์ฃผ์๋ค์ ํ์์ผํ๋ค. ํ์ง๋ง ์ต์ ์ ์ด๋์ 4์ ํ๋ ๊ฒ ๋ง๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์์๋ ๋ ๋ค์ ์ฃผ์์ด ๊ฐ์ด ๋ค์์ ๊ฐ์ฅ ์ต๊ณ ์ ๊ฐ์ ํ๋ ค์ผํ๋ค๋ ์์ด๋์ด๊ฐ ๋ ์ค๋ฅธ๋ค.
์ด๋ ๋ค์์๋ถํฐ ํ์ํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ๋งจ๋ค์ ๊ฐ์ max์ ๊ฐ์ด๋ค. (๋ค์ ์๋ฌด๊ฒ๋ ์๊ธฐ ๋๋ฌธ์) ๊ทธ๋ฆฌ๊ณ ๋ ํฐ ๊ฐ์ด๋์ค๋ฉด max๋ฅผ ์ด๊ธฐํํด์ฃผ๊ณ ๋ ์์ ๊ฐ์ด ๋์จ๋ค๋ฉด max๊ฐ์ผ๋ก ํ๋งคํ ๊ฐ์ ๋์ ํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ fileIO๋ฅผ ์ฌ์ฉํ ๋ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋ฐ์๋๋ array๋ฅผ ์ ์ํด๋ ๋ค ์นด์ดํธ๋งํผ arr.append(fIO.readInt())๋ฅผ ํ๋ฉด ๋๋ค.
import Foundation
final class FileIO {
private let buffer:[UInt8]
private var index: Int = 0
init(fileHandle: FileHandle = FileHandle.standardInput) {
buffer = Array(try! fileHandle.readToEnd()!)+[UInt8(0)] // ์ธ๋ฑ์ค ๋ฒ์ ๋์ด๊ฐ๋ ๊ฒ ๋ฐฉ์ง
}
@inline(__always) private func read() -> UInt8 {
defer { index += 1 }
return buffer[index]
}
@inline(__always) func readInt() -> Int {
var sum = 0
var now = read()
var isPositive = true
while now == 10
|| now == 32 { now = read() } // ๊ณต๋ฐฑ๊ณผ ์ค๋ฐ๊ฟ ๋ฌด์
if now == 45 { isPositive.toggle(); now = read() } // ์์ ์ฒ๋ฆฌ
while now >= 48, now <= 57 {
sum = sum * 10 + Int(now-48)
now = read()
}
return sum * (isPositive ? 1:-1)
}
@inline(__always) func readString() -> String {
var now = read()
while now == 10 || now == 32 { now = read() } // ๊ณต๋ฐฑ๊ณผ ์ค๋ฐ๊ฟ ๋ฌด์
let beginIndex = index-1
while now != 10,
now != 32,
now != 0 { now = read() }
return String(bytes: Array(buffer[beginIndex..<(index-1)]), encoding: .ascii)!
}
@inline(__always) func readByteSequenceWithoutSpaceAndLineFeed() -> [UInt8] {
var now = read()
while now == 10 || now == 32 { now = read() } // ๊ณต๋ฐฑ๊ณผ ์ค๋ฐ๊ฟ ๋ฌด์
let beginIndex = index-1
while now != 10,
now != 32,
now != 0 { now = read() }
return Array(buffer[beginIndex..<(index-1)])
}
}
import Foundation
let fIO = FileIO()
let tc = fIO.readInt()
for _ in 0..<tc {
let n = fIO.readInt()
var sum = 0
var arr = [Int]()
for _ in 0..<n {
arr.append(fIO.readInt())
}
arr.reverse()
var max = 0
for x in arr {
if x > max {
max = x
} else {
sum += max-x
}
}
print(sum)
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ๋จ์ด๊ณต๋ถ(Swift) (0) | 2022.11.08 |
---|---|
๋ฐฑ์ค - ํธ๋ญ ์ฃผ์ฐจ(Swift) (0) | 2022.11.08 |
๋ฐฑ์ค - ํต๋๋ฌด ๊ฑด๋๋ฐ๊ธฐ (0) | 2022.11.07 |
๋ฐฑ์ค - ํ์กฐ์์ด์ ๋ฆฌํ๊ณ ์ดใ ใ (Swift) (0) | 2022.11.07 |
๋ฐฑ์ค - ๋ฑ์ ๋ฉ๊ธฐ๊ธฐ(Swift) (0) | 2022.11.07 |