[백준] 11501번: 주식 - Kotlin[코틀린]

2024. 3. 20. 21:03·알고리즘/Baekjoon

문제

 

 

11501번: 주식

입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타

www.acmicpc.net

 


풀이

 

 단순하게 2중 for문을 사용하여 판매의 최대값을 갱신해가며 계산하는 풀이는 시간초과가 발생한다. 대신 역방향 탐색을 활용하여 해결해야 한다.

 

 주식으로 최대의 이익을 보려면 주식을 구입한 가격과 판매하는 가격의 차이가 가장 커야 한다. 역방향 탐색을 통해 판매하는 가격의 최대값을 얻을 수 있다. 먼저 마지막으로 입력받은 가격을 최대값으로 설정하고 역방향 탐색을 시작한다. 탐색 중 현재 값이 최대값보다 작다면 둘의 차이가 얻을 수 있는 가장 큰 이익이다. 현재 값이 최대값보다 크다면 최대값을 갱신해준다.

 

 예를 들어 예제 입력1에서 [1, 1, 3, 1, 2] 의 경우, 최대값을 2로 설정하고 역방향 탐색을 시작한다. 1은 2보다 작기 때문에 2원에 판매하는 것이 최대값으로 판매하는 것이다. 그 다음 만나는 값은 3이므로 3으로 최대값을 갱신해준다. 그리고 이전 주식의 값들은 3원에 판매된다.

 


코드

 

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val sb = StringBuilder()

    repeat(br.readLine().toInt()) {
        val day = br.readLine().toInt()
        val arr = br.readLine().split(' ').map { it.toInt() }

        var sum = 0L
        var max = arr[day-1]

        for(i in day-2 downTo 0) {
            if(arr[i] < max) {
                sum += max - arr[i]
            } else {
                max = arr[i]
            }
        }

        sb.append("$sum\n")
    }

    bw.write(sb.toString())
    bw.flush()
    bw.close()
    br.close()
}

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 5052번: 전화번호 목록 - Kotlin[코틀린]  (0) 2024.03.27
[백준] 1913번: 달팽이 - Kotlin[코틀린]  (0) 2024.03.22
[백준] 13301번: 타일 장식물 - Kotlin[코틀린]  (0) 2024.03.17
[백준] 1647번: 도시 분할 계획 - Kotlin[코틀린]  (0) 2024.03.13
[백준] 14719번: 빗물 - Kotlin[코틀린]  (0) 2024.03.12
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 5052번: 전화번호 목록 - Kotlin[코틀린]
  • [백준] 1913번: 달팽이 - Kotlin[코틀린]
  • [백준] 13301번: 타일 장식물 - Kotlin[코틀린]
  • [백준] 1647번: 도시 분할 계획 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      유니온파인드
      BFS
      그래프이론
      MST
      피보나치
      티스토리
      누적 합
      구현
      스택
      재귀
      크루스칼
      백트래킹
      dfs
      프림
      그리디
      투 포인터
      정렬
      분리집합
      우선순위 큐
      분할 정복
      브루트포스
      수학
      이분 탐색
      모듈러 곱셈 역원
      에라토스테네스의 체
      큐
      DP
      문자열
      소수 판정
      그래프 탐색
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 11501번: 주식 - Kotlin[코틀린]
    상단으로

    티스토리툴바