๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - ๋‹จ์†์นด๋ฉ”๋ผ(Greedy)

by ์ฃผ๋ฐœ2 2020. 3. 2.
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42884

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋‹จ์†์นด๋ฉ”๋ผ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2

programmers.co.kr

์ฝ”๋“œ

import java.util.*;

class Solution {
   public static int solution(int[][] routes) {
		int answer = 1;
		
		// 2์ฐจ์› ๋ฐฐ์—ด ์ •๋ ฌ 
		// ์ง„์ž…์ง€์ ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ -> ๊ฐ™์œผ๋ฉด ๋‚˜๊ฐ„์ง€์ ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ
		Arrays.sort(routes, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[0] == o2[0])
					return Integer.compare(o1[1], o2[1]);
				return Integer.compare(o1[0], o2[0]);
			}
		});
		int outCome = routes[0][1];
		
		for(int i=1; i<routes.length-1; i++) {
			// ํ˜„์žฌ ์ฐจ์˜ ์ง„์ถœ ์ง€์ ์ด ๋‹ค์Œ์— ๋“ค์–ด์˜ฌ ์ฐจ์˜ ์ง„์ถœ์ง€์ ๋ณด๋‹ค ํด ๊ฒฝ์šฐ
			if(outCome > routes[i][1])
				outCome = routes[i][1];
			
			// ํ˜„์žฌ ์ฐจ์˜ ์ง„์ถœ ์ง€์ ๋ณด๋‹ค ๋‹ค์Œ ์ฐจ์˜ ์ง„์ž… ์ง€์ ์ด ๋” ํด๊ฒฝ์šฐ
			// -> ๋‹จ์† ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฏ€๋กœ ์นด๋ฉ”๋ผ +1 , ๋‹ค์Œ ๋‹จ์†๋ฒ”์œ„ ์ง€์ •
			if(outCome < routes[i+1][0]) {
				answer ++;
				outCome = routes[i+1][1];
			}
		}
		return answer;
	}
}

ํ’€์ด

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋ผ ๊ทธ๋ฆฌ๋””์Šค๋Ÿฝ๊ฒŒ(?) ํ’€์—ˆ๋‹ค.

์ด์ „์˜ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋“ค๋„ ๊ทธ๋ ‡๊ณ , ๋ฒ”์œ„ ์ง€์ •๊ณผ ์ •๋ ฌ, ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ๋ฒ”์œ„์— ์ถฉ์กฑํ•˜๋Š”์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•˜๋Š” ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ๋„ ๋น„์Šทํ•˜๊ฒŒ ํ•ด๊ฒฐํ•œ๋‹ค.

๋จผ์ € ์ฃผ์–ด์ง„ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ •๋ ฌ์„ํ•˜๋Š”๋ฐ, ์ •๋ ฌ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ–ˆ๋‹ค.

 1) ์ฐจ๋Ÿ‰์ด ๊ณ ์†๋„๋กœ์— ์ง„์ž…ํ•œ ์ง€์ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•œ๋‹ค.

 2) ๋งŒ์•ฝ ์ง„์ž…ํ•œ ์ง€์ ์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ? -> ์ง„์ถœ ์ง€์ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•œ๋‹ค.

Comparator<T> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๋ฐฐ์—ด์„ ํ•œ๋‹ค.

 

Comparator์ด๋ž€

 

์œ„ ๋ฐฉ์‹๋Œ€๋กœ ์ž…์ถœ๋ ฅ ์˜ˆ๋ฅผ ํ† ๋Œ€๋กœ ์ •๋ ฌ์„ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ •๋ ฌ์ „ : [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 

์ •๋ ฌํ›„ : [[-20,15], [-18,-13], [-14,-5], [-5,-3]]

 

์ด์ œ ๊ณ ์†๋„๋กœ์— ๋จผ์ € ์ง„์ž…ํ•œ ์ฐจ์™€ ๋Šฆ๊ฒŒ ์ง„์ž…ํ•œ ์ฐจ๋ฅผ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ, ์–ด๋””์„œ ๋น ์ ธ๋‚˜๊ฐ€๋Š”์ง€ , ๋งŒ์•ฝ ๋น ์ ธ๋‚˜๊ฐ”๋‹ค๋ฉด ๊ทธ ๋‹ค์Œ์ฐจ๋Š” ์นด๋ฉ”๋ผ ๋‹จ์† ๋ฒ”์œ„์— ํฌํ•จ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

 

outCome๋Š” ํ˜„์žฌ ์นด๋ฉ”๋ผ์˜ ๋ฒ”์œ„๋‹ค. ์ดˆ๊ธฐ์— ์นด๋ฉ”๋ผ๋Š” ํ•œ๋Œ€๋Š” ๋ฌด์กฐ๊ฑด ์„ค์น˜ํ•ด์•ผํ•˜๋ฏ€๋กœ 1๋กœ ์„ค์ •ํ•˜๊ณ , 

outCome์˜ ์ดˆ๊ธฐ๊ฐ’์€ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ๋กœ ๋“ค์–ด์˜จ ์ฐจ๋กœ ์ง€์ •ํ•œ๋‹ค.(routes[0][1])

๋‚˜๊ฐ€๋Š” ์ฐจ(routes[i][1])์˜ ๊ฐ’๋“ค๊ณผ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ๋” ์ž‘์€ ๊ฐ’๋“ค์„ ์ €์žฅํ•œ๋‹ค.

๊ทธ ํ›„ outCome ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์—์„œ ๋‹ค์Œ ์ฐจ๊ฐ€ ์ถœ๋ฐœํ•œ๋‹ค๋ฉด(์ง„์ž…์ง€์ ) ๋‹จ์† ๋ฒ”์œ„ ์•ˆ์— ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์นด๋ฉ”๋ผ์˜ ๊ฐฏ์ˆ˜๋ฅผ +1 ํ•œ๋‹ค.

 

 

์ฝ”๋“œ๋Š” ๊ธธ์ง€ ์•Š์ง€๋งŒ ๋งŽ์€ ์ƒ๊ฐ์„ ์š”๊ตฌํ•˜๋Š” ์ •๋ง ๊น”๋”ํ•œ ๋ฌธ์ œ ์ธ ๊ฒƒ ๊ฐ™๋‹ค..

์œ„์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋“ค์„ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๋ฐฑ์ค€ 1449๋ฒˆ ์ˆ˜๋ฆฌ๊ณตํ•ญ์Šน

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ธฐ์ง€๊ตญ์„ค์น˜

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€