https://www.acmicpc.net/problem/20546
풀이과정
구현 문제이기 때문에 지문을 천천히 읽으면서 문제를 이해하려고 노력했다.
간단 정리하자면,
준현은 주식을 살 수 있는 돈이 있으면 그때그때 최대로 매수하며, 끝까지 팔지 않는다.
성민의 경우 3일 이상 연속으로 주가가 하락하면 그때 돈이 되는 만큼 풀매수하며, 반대로 3일 연속 상승하면 그때 풀매도 한다.
때문에 두개의 변수를 두어 하락과 상승일 수를 카운팅 하여 성민이의 매수 매도 타이밍을 잡는다.
또한, 준현과 성민의 돈과 주식 수를 튜플을 사용하여 관리하였다.
let money = Int(readLine()!)!
let chart = readLine()!.split(separator: " ").map { Int($0)! }
var J: (money: Int, stock: Int) = (money, 0)
var S: (money: Int, stock: Int) = (money, 0)
var downCount = 0
var upCount = 0
for i in 0..<chart.count {
if i != 0 {
if chart[i] > chart[i-1] {
upCount += 1
downCount = 0
} else if chart[i] == chart[i-1] {
upCount = 0
downCount = 0
} else {
downCount += 1
upCount = 0
}
}
if J.money >= chart[i] {
J.stock += J.money / chart[i]
J.money -= J.money / chart[i] * chart[i]
}
if downCount >= 3 && S.money >= chart[i] {
S.stock += S.money / chart[i]
S.money -= S.money / chart[i] * chart[i]
}
if upCount >= 3 && S.stock > 0 {
S.money += S.stock * chart[i]
S.stock = 0
}
if i == 13 {
if J.money + J.stock * chart[i] > S.money + S.stock * chart[i] {
print("BNP")
} else if J.money + J.stock * chart[i] < S.money + S.stock * chart[i] {
print("TIMING")
} else {
print("SAMESAME")
}
}
}
'코테' 카테고리의 다른 글
[이분 탐색] 백준 실버3 2512번: 예산(Swift) (0) | 2023.05.18 |
---|---|
[완전 탐색] 백준 브론즈1 10448번: 유레카 이론(Swift) (0) | 2023.05.18 |
[BFS] 백준 실버1 2178번: 미로 탐색(Swift) (0) | 2023.05.16 |
[다이나믹 프로그래밍] 백준 실버3 1463번: 1로 만들기(Swift) (0) | 2023.05.16 |
[구현 + 재귀] 백준 실버5 17478번: 재귀함수가 뭔가요?(Swift) (0) | 2023.05.15 |