여니의 취준 준비/코딩테스트 (Java)

[20207] 달력 in Java

여니's 2022. 8. 14. 16:01

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

 

20207번: 달력

 수현이는 일년의 날짜가 1일부터 365일로 표시되어있는 달력을 가지고있다. 수현이는 너무나도 계획적인 사람이라 올 해 일정을 모두 계획해서 달력에 표시해놨다.  여름이 거의 끝나가자 장

www.acmicpc.net


https://eboong.tistory.com/322

 

[n20207] 달력

https://www.acmicpc.net/problem/20207 20207번: 달력  수현이는 일년의 날짜가 1일부터 365일로 표시되어있는 달력을 가지고있다. 수현이는 너무나도 계획적인 사람이라 올 해 일정을 모두 계획해서 달력

eboong.tistory.com

 

로직은 위에 나와있는 링크와 똑같이 풀었다!

언어만 자바로 바뀌어있을 뿐.

 

package day_0814;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class n20207 {
	static int[] cal;
	public static void main(String[] args) throws IOException {
		BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
		int n= Integer.parseInt(br.readLine()); // 일정의 개수
		cal=new int[366];
		
		// 시작일, 종료일 입력받기 (일정)
		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int start=Integer.parseInt(st.nextToken());
			int end=Integer.parseInt(st.nextToken());
			for (int j = start; j <=end; j++) {
				cal[j]+=1; // 코팅지 높이 저장
			}
		}
		
		int answer=0; // 코팅지 최종 면적
		int width=0; // 코팅지 가로 길이
		int height=0; // 코팅지 세로 길이
		
		for (int i = 1; i < cal.length; i++) {
			if(cal[i]==0) {
				if (width>0) {
					answer+=width*height;
				}
				width=0; height=0;
			}else {
				width+=1;
				height=Math.max(height, cal[i]);
			}
		}
		if(width>0) answer+=width*height;
		System.out.print(answer);
	}
}