
주식 매도/매수 방법이 다른 준현이와 성민이.
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 |