[구현] 백준 실버5 20546번: 기적의 매매법(Swift)

2023. 5. 16. 22:09·코테

https://www.acmicpc.net/problem/20546

 

20546번: 🐜 기적의 매매법 🐜

1월 14일 기준 준현이의 자산이 더 크다면 "BNP"를, 성민이의 자산이 더 크다면 "TIMING"을 출력한다. 둘의 자산이 같다면 "SAMESAME"을 출력한다. 모든 결과 따옴표를 제외하고 출력한다.

www.acmicpc.net

풀이과정

구현 문제이기 때문에 지문을 천천히 읽으면서 문제를 이해하려고 노력했다.

간단 정리하자면,

준현은 주식을 살 수 있는 돈이 있으면 그때그때 최대로 매수하며, 끝까지 팔지 않는다.

성민의 경우 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
'코테' 카테고리의 다른 글
  • [이분 탐색] 백준 실버3 2512번: 예산(Swift)
  • [완전 탐색] 백준 브론즈1 10448번: 유레카 이론(Swift)
  • [BFS] 백준 실버1 2178번: 미로 탐색(Swift)
  • [다이나믹 프로그래밍] 백준 실버3 1463번: 1로 만들기(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    회고
    구현
    탐색
    GCD
    Swift
    완전탐색
    챌린지
    이분탐색
    실버
    노드
    네부캠
    그리디
    Property wrapper
    브루트포스 알고리즘
    코딩테스트
    비동기
    동시성
    알고리즘
    코테
    ios
    photos
    photoUI
    재귀
    Combine
    백준
    다이나믹 프로그래밍
    BFS
    dfs
    PhotoKit
    Race Condition
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[구현] 백준 실버5 20546번: 기적의 매매법(Swift)
상단으로

티스토리툴바