주식 매도/매수 방법이 다른 준현이와 성민이.
1/1~1/14 기간 동안 각자의 방법으로 자산을 불린 후 둘 중 누가 더 자산이 많은지 결과를 출력하는 문제.
- 1/1~1/14 배열을 돌면서 각자의 자산을 체크한다
- 준현이: 현재가가 현금보다 낮으면 전부 매수
- 성민이: 3일 연속 상승 & 보유 주식이 있다면 전량 매도 / 3일 연속 하락 & 현재가가 현금보다 낮으면 전량 매수
- 자산 계산: 현금 + 주가 * 주식 수
//
// 20546.swift
// CodingTestPractice
//
// Created by CHOI on 2023/05/21.
//
// 기적의 매매법
import Foundation
let cash = Int(readLine()!)!
let MachineDuck = readLine()!.split(separator: " ").map{ Int($0)! }
// 승자 판단 함수
func solution() -> String {
var answer = "SAMESAME"
let BNP = bnp(cash: cash, arr: MachineDuck)
let TIMING = timing(cash: cash, arr: MachineDuck)
if BNP > TIMING {
answer = "BNP"
} else if BNP < TIMING {
answer = "TIMING"
}
return answer
}
// 준현이의 결과
func bnp(cash: Int, arr: [Int]) -> Int {
var tempCash = cash
var stock = 0
var asset = 0
// 주가가 현금보다 낮다면 살 수 있는 만큼 매수
arr.forEach { price in
if price <= tempCash {
stock += tempCash / price
tempCash = tempCash % price
}
}
asset = tempCash + stock * arr[13]
return asset
}
// 성민이의 결과
func timing(cash: Int, arr: [Int]) -> Int {
var tempCash = cash
var stock = 0
var asset = 0
var keepGoing = 0 // 연속 며칠동안 상승/하락인지 판단하는 변수
for i in 0...13 {
let price = arr[i]
// 전날보다 상승/하락인지 판단 후 keepGoing에 반영
if i > 0 && arr[i - 1] < arr[i] {
if keepGoing < 0 {
keepGoing = 1
} else {
keepGoing += 1
}
} else if i > 0 && arr[i - 1] > arr[i] {
if keepGoing > 0 {
keepGoing = -1
} else {
keepGoing -= 1
}
} else if i > 0 && arr[i - 1] == arr[i] {
keepGoing = 0
}
// 3일 연속일 경우 전량 매도/매수
if keepGoing >= 3 && stock > 0 {
// sell
tempCash += stock * price
stock = 0
} else if keepGoing <= -3 && price < tempCash {
// buy
stock += tempCash / price
tempCash = tempCash % price
}
}
asset = tempCash + stock * arr[13]
return asset
}
print(solution())
실버 5의 쉬운 문제였다. 이런 문제들은 시간을 줄이는 게 관건인 듯 하다.. 더 많이 풀어보자
'공부하자! > 알고리즘' 카테고리의 다른 글
백준 21608 상어 초등학교 Swift - 구현 (0) | 2023.06.20 |
---|---|
백준 1913 달팽이 Swift - 구현 (0) | 2023.05.23 |
백준 20053 최소, 최대 2 Swift - 구현 (0) | 2023.05.13 |
프로그래머스 | 영어 끝말잇기 Lv.2 Swift (0) | 2023.03.17 |
프로그래머스 | 방문 길이 Lv.2 Swift (0) | 2023.03.17 |