[Study] 19.최대 실행 횟수 구하기

2021. 1. 26. 17:26

1. Problem

 

각 세션의 시작시간은 StartTime 함수에 들어있고 각 시작시간의 발표시간은 RunningTime에 들어있다.

시간당 한 세션밖에 발표할 수 없다.

주어진 start_time과 running_time에서 발표가능한 최대 세션 횟수를 구하여라.

 

case1)

Input : n = 5; start_time : [1,3,3,5,7], running_time: [2,2,1,2,1]

Output : 3

 

case2)

Input : n = 3; start_time : [1, 3, 5], running_time: [2 ,2, 2]

Output : 3

 

case3)

Input: n = 1; start_time : [1], running_time: [1]

Output: 1

주어진 발표리스트에서 가능한 최대 세션 회수를 정하시오.

 

 

2. Code

import java.util.ArrayList;
import java.util.List;

public class ifKakao {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 5;
		int[] start_time = {1,3,3,5,7};
		int[] running_time = {2,7,4,3,1};
		System.out.print(Max_run(n, start_time, running_time));
	}
	
	public static int Max_run(int n, int[] start_time, int[] running_time) {
		if(start_time.length == 1) {
			return 1;
		}
        
		List<Integer> start = new ArrayList<>();
		List<Integer> running = new ArrayList<>();

		for(int i = 0; i < n; i++) {
			if(i == 0) {
				if(start_time[i] + running_time[i] <= start_time[i+1]){
					start.add(start_time[i]);
					running.add(running_time[i]);
				} else {
					if(start_time[i] + running_time[i] <= start_time[i+1] + running_time[i+1]) {
						start.add(start_time[i]);
						running.add(running_time[i]);
					} else {
						start.add(start_time[i+1]);
						running.add(running_time[i+1]);
					}
					i++;
				}
			} else {
				if(start.get(start.size()-1) + running.get(running.size()-1) <= start_time[i]) {
					start.add(start_time[i]);
					running.add(running_time[i]);
				} else {
					if(start.get(start.size()-1) + running.get(running.size()-1) > start_time[i+1] + running_time[i+1]) {
						start.set(start.size()-1 , start_time[i]);
						running.set(running.size()-1 ,running_time[i]);
					} 
				}
			}
		}
		return start.size();
}

 

3. Report

처음엔 재귀로 모든 경우의 수를 구해야 되는지 알았다.

생각해보다가 start_time[i] + running_time[i] 와 start_time[i+1] + running_time[i+1]중에 작은걸 넣으면 항상 최댓값이 나온다고 생각이 들어 코드를 짰다.

실행 시간이 n이라 빠른 편인거같다 (결과모름)

'Algorithm > 문제' 카테고리의 다른 글

[Study] 21. 두개의 원 반경 안에 있는 좌표 값 찾기  (0) 2021.03.02
[LeetCode] 20.Search Insert Position  (0) 2021.03.02
[LeetCode] 18.Same Tree  (0) 2021.01.22
[LeetCode] 17.Add Binary  (0) 2021.01.21
[LeetCode] 16.3Sum  (0) 2021.01.21

BELATED ARTICLES

more