[ํ๋ก๊ทธ๋๋จธ์ค, Java] ๋จ์์นด๋ฉ๋ผ
๐ ๋ฌธ์ ๋งํฌ
https://programmers.co.kr/learn/courses/30/lessons/42884
๐ค ๋ฌธ์
๊ณ ์๋๋ก๋ฅผ ์ด๋ํ๋ ๋ชจ๋ ์ฐจ๋์ด ๊ณ ์๋๋ก๋ฅผ ์ด์ฉํ๋ฉด์ ๋จ์์ฉ ์นด๋ฉ๋ผ๋ฅผ ํ ๋ฒ์ ๋ง๋๋๋ก ์นด๋ฉ๋ผ๋ฅผ ์ค์นํ๋ ค๊ณ ํฉ๋๋ค.
๊ณ ์๋๋ก๋ฅผ ์ด๋ํ๋ ์ฐจ๋์ ๊ฒฝ๋ก routes๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ฐจ๋์ด ํ ๋ฒ์ ๋จ์์ฉ ์นด๋ฉ๋ผ๋ฅผ ๋ง๋๋๋ก ํ๋ ค๋ฉด ์ต์ ๋ช ๋์ ์นด๋ฉ๋ผ๋ฅผ ์ค์นํด์ผ ํ๋์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
๐ ์ ํ์ฌํญ
- ์ฐจ๋์ ๋์๋ 1๋ ์ด์ 10,000๋ ์ดํ์ ๋๋ค.
- routes์๋ ์ฐจ๋์ ์ด๋ ๊ฒฝ๋ก๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ routes[i][0]์๋ i๋ฒ์งธ ์ฐจ๋์ด ๊ณ ์๋๋ก์ ์ง์ ํ ์ง์ , routes[i][1]์๋ i๋ฒ์งธ ์ฐจ๋์ด ๊ณ ์๋๋ก์์ ๋๊ฐ ์ง์ ์ด ์ ํ ์์ต๋๋ค.
- ์ฐจ๋์ ์ง์ /์ง์ถ ์ง์ ์ ์นด๋ฉ๋ผ๊ฐ ์ค์น๋์ด ์์ด๋ ์นด๋ฉ๋ผ๋ฅผ ๋ง๋๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
- ์ฐจ๋์ ์ง์ ์ง์ , ์ง์ถ ์ง์ ์ -30,000 ์ด์ 30,000 ์ดํ์ ๋๋ค.
๐ฎ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฐจ๋์ด ์ง๋๊ฐ๋ฉด์ ๊ฒน์น๋ ์ง์ ์ ์ง์ ํ ํ ๊ฒน์น๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์นด๋ฉ๋ผ๋ฅผ ํ๋ ๋ ์ค์นํ๋ ํ๋ฆ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๋ฐ๋ผ์, ๋ฐฐ์ด์ โ๋๊ฐ ์ง์ โ์ผ๋ก ์ ๋ ฌํด ์ค๋ค. ๋๋ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
๋ฐฐ์ด์ ๋๊ฐ ์ง์ ์ผ๋ก ์ ๋ ฌ์ ํ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ 7๊ฐ์ง ๊ฒฝ์ฐ์ ์๊ฐ ๋์จ๋ค.
1,2,3์ ๊ฒฝ์ฐ ๋ค์ ์ฐจ๋์ ์ง์ ์ง์ ์ด ๋ฒ์๋ก ์ง์ ํ ๋ถ๋ถ ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ (curIn โค rangeIn) โ ์ด์ ์ฐจ๋๊ณผ ๊ฒน์น๋ ๋ฒ์๊ฐ ๊ฐฑ์ ์ ํ ํ์๊ฐ ์๋ค.
4,5,6์ ๊ฒฝ์ฐ ๋ค์ ์ฐจ๋์ ์ง์ ์ง์ ์ด ์นด๋ฉ๋ผ ์ค์น ๋ฒ์ ์ง์ ์ง์ ๋ณด๋ค ํฌ๊ณ ๋ฒ์ ์ง์ถ ์ง์ ๋ณด๋ค ์์ ๊ฒฝ์ฐ (rangeIn < curIn < rangeOut) โ ๋ฒ์ ์ง์ ์ง์ ์ ๋ค์ ์ฐจ๋ ์ง์ ์ง์ ์ผ๋ก ๊ฐฑ์ ํด์ค๋ค.
7์ ๊ฒฝ์ฐ ์นด๋ฉ๋ผ ์ค์น ๋ฒ์ ์ง์ถ ์ง์ ๋ณด๋ค ๋ค์ ์ฐจ๋์ ์ง์ ์ง์ ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์ ์นด๋ฉ๋ผ๋ฅผ ๋์์ ์ค์นํ ์ ์๋ค. ๋ฐ๋ผ์, ์นด๋ฉ๋ผ์ ์๋ฅผ ํ๋ ์ฆ๊ฐํ ํ ๋ฒ์๋ฅผ ์๋ก ๋ค์ด์ค๋ ์ฐจ๋์ ์ง์ ์ง์ ๊ณผ ์ง์ถ์ง์ ์ผ๋ก ๊ฐฑ์ ํด์ค๋ค.
๐ฉ Java ์ฝ๋
package com.algorithm.Programmers.Lv3;
import java.util.PriorityQueue;
public class Solution_42884_๋จ์์นด๋ฉ๋ผ {
public static void main(String[] args) {
int[][] routes = {{-20,-15}, {-14,-5}, {-18,-13}, {-5,-3}};
int solution = solution(routes);
System.out.println("solution = " + solution);
}
private static int solution(int[][] routes) {
int count = 1;
PriorityQueue<Camera> pq = new PriorityQueue<>();
for(int[] route : routes) {
pq.offer(new Camera(route[0], route[1]));
}
int rangeIn = pq.peek().getIn();
int rangeOut = pq.peek().getOut();
while(!pq.isEmpty()) {
Camera camera = pq.poll();
int curIn = camera.getIn();
int curOut = camera.getOut();
// ์ง์
์ง์ ์ด ์ด์ ์ฐจ๋์ด ์ฐํ ์ ์๋ ์นด๋ฉ๋ผ ๋ฒ์์ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ (์ฌ์ง์ 4,5,6๋ฒ)
if(rangeIn < curIn && curIn < rangeOut) {
rangeIn = curIn;
}
// ์ง์
์ง์ ์ด ์ด์ ์ฐจ๋์ด ์ฐํ ์ ์๋ ์นด๋ฉ๋ผ ๋ฒ์๋ณด๋ค ๋ค์ ์๋ ๊ฒฝ์ฐ = ๊ฐฑ์ (์ฌ์ง์ 7๋ฒ)
else if(rangeOut < curIn){
rangeIn = curIn;
rangeOut = curOut;
count++;
}
// ์ด์ธ์ ๊ฒฝ์ฐ ๋ฒ์๋ฅผ ๊ฐฑ์ ์ ํ ํ์๊ฐ ์๋ค. (์ฌ์ง์ 1,2,3๋ฒ)
}
return count;
}
static class Camera implements Comparable<Camera> {
private int in;
private int out;
public Camera(int in, int out) {
this.in = in;
this.out = out;
}
public int getIn() {
return in;
}
public int getOut() {
return out;
}
@Override
public int compareTo(Camera o) {
return Integer.compare(this.out, o.out);
}
}
}