경험의 기록

문제 : www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

 

 

코드

import java.util.*
import kotlin.math.max

var maximum = 0
var sum = 0
var arr = arrayListOf<Pair<Int,Int>>()
var n = 0

fun main() = with(Scanner(System.`in`)) {
    n = nextInt()

    // 입력받은 t와 p 쌍으로 저장
    for(i in 0 until n){
        arr.add(Pair(nextInt(),nextInt()))
    }

    // 가능한 모든 경우 탐색
    for(i in 0 until n){
        find(i,arr[i].first)
    }

    println(maximum)
}

fun find(index : Int, x : Int){
     // 퇴사하는 날까지 딱 맞춰 일한경우
     if(index+x == n){
         sum+= arr[index].second
         maximum = max(maximum,sum)
         sum = 0
     }
    // 퇴사하는 날 넘어가는 일 일 때
    else if(index+x > n){
         maximum = max(maximum,sum)
         sum = 0
     }

    // 퇴사하는 날 전에 할 수 있는 일
    else {
         sum += arr[index].second
         var tmp = sum
         for(i in index+x until n) {
             // 이후로 할 수 있는 일의 경우 다 따져봄
             sum = tmp
             find(i,arr[i].first)
         }
     }
}

github.com/HanYeop/Algorithm/blob/main/14501.kt

 

HanYeop/Algorithm

알고리즘 문제풀이 저장소 (2021/04/22 ~. Contribute to HanYeop/Algorithm development by creating an account on GitHub.

github.com

가능한 모든 경우의 수를 탐색하였다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading