소프티어 lv.3 Pipelined

알고리즘/java 2025. 4. 13. 16:29
import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		String[] s = br.readLine().split(" ");
		
		int[] i = Arrays.stream(s).mapToInt(Integer::parseInt).toArray();
		
		Arrays.sort(i);
		
		System.out.println((n -1) + i[i.length-1]);
		
	}
}

 

https://softeer.ai/practice/9496

 

백준에서 문제를 복사해오면서 수식에서 에러가 생겼는지 문제 설명을 보면 도저히 무슨 말인지 이해할 수가 없다.

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

위의 문제로 푸는 게 이해가 쉽다.

 

si가 작은 숫자부터 정렬하면 숫자가 같을지라도 작업 타임라인이 겹칠 수가 없기 때문에 작은 숫자부터 큰 숫자 순으로 실행한다고 생각하면 된다.

2, 2, 3, 4가 있다고 가정하면

첫 1초에 0~1/2까지 2짜리 첫 작업을 배정하고

다음 1초에 위에서 배정한 2짜리 첫 작업이 1/2~2/2로 옮겨간다. 그리고 2짜리 두째 작업이 다시 0~1/2로 배정되는데 0 이상 1/2 미만에 위치하므로 1/2이상 2/2미만과 겹치지 않는다.

이런 식으로 이어지기 때문에 결국 답은 최대 수 + 배열의 길이 - 1 만큼의 시간이 나오게 된다.