Java : 결혼식

cad·2022년 1월 11일
0

Algorithm

목록 보기
16/33

문제

풀이

  1. 입장, 퇴장할 때 기록을 모두 array에 추가한다.

  2. 담을 때 입장은 's' 퇴장은 'e' 로 Times클래스로 묶어 추가한다.

  3. 시간 순으로 정렬을 하는데 동시간대에 출입은 퇴장('e') -> 입장('s')순으로 정렬한다.

    • 정각이 되면 먼저 나가고 뒤에 사람이 들어오기 때문에 나가는거 먼저 체크!
  4. 모든 출입 기록을 돌려보면서 cnt가 최대점이 되는 시기가 최대 인원인 경우이다.

잡담

문자열 정렬 : 
처음엔 's'말고 true, false로 했다가 char로 했다가 정렬 안되길래 String 으로 바꿨다.
return this.entrance.compareTo(o.entrance);
  • 그리디 문제는 어떻게 풀이에 접근해야할지 감이 안 잡힌다. 그래프는 그래도 그림이라도 그려지는데 구현이나 이런 문제는 코드를 보기 전까진 머리가 새하얗다.. 열심히 많이 풀어보자, 반복 반복

전체 코드

package inflearn;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class I0903 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();

		ArrayList<Times> arr = new ArrayList<>();


		for (int i = 0; i < n; i++) {
			arr.add(new Times(sc.nextInt(), "s"));
			arr.add(new Times(sc.nextInt(), "e"));
		}

		System.out.println(sol(arr, n));
	}

	static int sol(ArrayList<Times> arr, int n) {
		int cnt = 0;
		int ans = 0;

		Collections.sort(arr);

		for (Times t : arr) {
			if (t.entrance.equals("s")) {
				cnt++;
				if (cnt > ans) ans = cnt;
			} else cnt--;
		}
		return ans;
	}

	static class Times implements Comparable<Times> {
		int time;
		String entrance;

		public Times(int time, String entrance) {
			this.time = time;
			this.entrance = entrance;
		}

		@Override
		public int compareTo(Times o) {
			if (this.time == o.time) {
				return this.entrance.compareTo(o.entrance);
			} else return this.time - o.time;
		}
	}
}
profile
Dare mighty things!

0개의 댓글