본문 바로가기
개발/코딩테스트

정올 1828번: 냉장고 [JAVA]

by 로또 2023. 3. 18.

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1101&sca=3050 

 

JUNGOL

 

www.jungol.co.kr

  • 풀이

화학물질의 최저 보관 온도 순으로 정렬한 뒤, 가장 최저온도가 낮은 화학물질의 최고 보관 온도로 냉장고의 온도 범위를 지정한다.

새로 들어온 물질의 최고 보관 온도가 현재 지정된 최고 보관 온도보다 낮다면 그 온도로 갱신한다.

또한 냉장고의 최고 보관 온도보다 최저 보관 온도가 높은 물질이 나타나면 새로운 냉장고를 사용한다.

이렇게 모든 화학 물질을 탐색하고, 사용된 냉장고의 수를 세서 출력한다.

  • 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	static int N;
	static int [][] C ;
	static int cnt;
	
	static void find() {
		int tempMax = C[0][1]; // 첫번째 냉장고의 가능한 최고 온도 
		cnt++;
		
		for (int i=1; i<N; i++) {
			if (tempMax < C[i][0]) { // 냉장고 최고 온도보다 물질의 최저 저장 온도가 높다면 
				cnt++; // 새로운 냉장고 사용 
				tempMax = C[i][1];
			}
			else {
				tempMax = tempMax<C[i][1]?tempMax:C[i][1]; // 냉장고의 가능한 최고 온도 갱신 
			}
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		
		// 입력 및 초기화 
		N = Integer.parseInt(st.nextToken());
		C = new int [N][2];
		for (int i=0; i<N; i++){
			st = new StringTokenizer(bf.readLine());
			C[i][0] = Integer.parseInt(st.nextToken());
			C[i][1] = Integer.parseInt(st.nextToken());
		}
		
		// 최저 보관 온도순 정렬 
		Arrays.sort(C, (o1, o2)->{
			if (o1[0]==o2[0]) return o1[1]-o2[1];
			else return o1[0] - o2[0];
		});
		
		// 냉장고 대수 찾기 
		find();
		
		// 출력 
		System.out.println(cnt);
	}
}

'개발 > 코딩테스트' 카테고리의 다른 글

백준 2638번: 치즈 [JAVA]  (0) 2023.03.27
백준 9663번: N-Queen [JAVA]  (0) 2023.03.27
백준 1260번: DFS와 BFS [JAVA]  (0) 2023.03.18
백준 2178번: 미로 탐색 [JAVA]  (0) 2023.03.18
백준 1991번: 트리순회 [JAVA]  (0) 2023.03.18

댓글