빡코

백준_1931번_회의실배정 본문

Algorithm

백준_1931번_회의실배정

chris.djang 2020. 1. 16. 16:52

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

 

1931번: 회의실배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

출력

첫째 줄에 최대 사용할 수 있는 회의 수를 출력하여라.

 

로직

첫번째시도!

--왜 HashMap을 선택했는가? 다른 대안은 없는가? 

HashMap을 이용해서 값을 입력하고 아래의 두 가지 Print 방법으로 출력을 한다. 

	Map<Integer,Integer> start_end = new HashMap<>();
    
	start_end.put(1, 12); //예제값 입력

	//방법1
	Set<Map.Entry<Integer, Integer>> entries = start_end.entrySet();
		
	for(Map.Entry<Integer, Integer> entry : entries) {
			
			System.out.print("key: "+ entry.getKey());
			System.out.println(", Value: "+ entry.getValue());
			
		}
		
	//방법2(람다식)
	start_end.forEach((key,value) ->{
			System.out.print("key: "+key);
			System.out.println(",value: " +value);
	});
		

 

HashMap은 key 값이 중복될 경우 value 값이 오버랩되기 때문에 로직을 사용할 수 없음 . 

 

두번째시도!!

public class No_1931 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt(); //N개의 회의 입력

		ArrayList<Start_end> str_end = new ArrayList<Start_end>();

		for(int i =0;i<n;i++) {

			int start_time= sc.nextInt();
			int end_time = sc.nextInt();

			str_end.add(new Start_end(start_time, end_time));
		}
		//입력된 starttime & endtime 출력 
		System.out.println(str_end.size());
		for(Start_end num: str_end) {
			System.out.println(num.start_time+" "+num.end_time);

		}
		//오름차순 정렬 완료 
		str_end.sort(new Comparator<Start_end>() {
			@Override
			public int compare(Start_end e_time0, Start_end e_time1) {
				// TODO Auto-generated method stub

				int e_time01 =e_time0.getEnd_time();
				int e_time11 =e_time1.getEnd_time();
				if(e_time01 == e_time11)
					return 0;
				else if(e_time01> e_time11)
					return 1;
				else
					return -1;
			}
		});
		System.out.println("오름차순 정렬");
		for(int i=0;i<str_end.size();i++) {
			System.out.println(str_end.get(i).start_time +" "+str_end.get(i).end_time);
		}
		
		int count =1;
		for(int i=0;i<str_end.size();i++) {
			for(int j=i+1;j<str_end.size();j++) {
				if(str_end.get(i).end_time<=str_end.get(j).start_time) {
					//System.out.println("str_end.get(i).end_time:  "+str_end.get(i).end_time +"  str_end.get(j).start_time:  "+str_end.get(j).start_time);
					//i값을 초기화 
					//i <= 새로 시작하는 endtime의 값이 
					i=j;
					i--;
					count++;
					break;	
				}
			}
		}
		System.out.println(count);

	}
}

//시작 끝시간 DTO
class Start_end{
	int start_time; 
	int end_time;

	public Start_end(int start_time, int end_time) {
		this.end_time = end_time;
		this.start_time = start_time;
	}

	public int getStart_time() {
		return start_time;
	}

	public void setStart_time(int start_time) {
		this.start_time = start_time;
	}

	public int getEnd_time() {
		return end_time;
	}

	public void setEnd_time(int end_time) {
		this.end_time = end_time;
	}


}

콘솔결과값 

 

'Algorithm' 카테고리의 다른 글

백준_11399번_ATM  (0) 2020.01.15
[과제]프로그래머스_두 정수 사이의 합  (0) 2020.01.02
[과제] 설명 준비해오기1  (0) 2020.01.02
[ 과제]백준_ 11047번_동전0  (0) 2020.01.02
[과제]백준_ 10872번 _팩토리얼  (0) 2020.01.02