알고리즘/PROGRAMMERS (JAVA)
[ 프로그래머스 / LV2 / JAVA ] 요격 시스템
Heeto
2023. 5. 1. 09:40
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181188
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public int solution(int[][] targets) {
int answer = 0;
int limit = 0;
Arrays.sort(targets,Comparator.comparing((int[] a) -> a[0]).thenComparing((int[] a) -> a[1]));
for (int[] t: targets){
int left = t[0];
int right = t[1];
if (right <= limit){
limit = right;
}
else if (left >= limit){
answer ++;
limit = right;
}
}
//System.out.println(Arrays.deepToString(targets));
return answer;
}
}
풀이
파이썬으로만 알고리즘을 해결해온지 1년 가까이 되었는데 우테캠 코테에서 '자바만 허용' 선언에 자바로 내가 풀어왔던 문제들을 다시 해결해나갈 생각이다. 혹시나 문제의 해결법이 자세히 궁금한 사람은 아래의 링크로... https://blogeon.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV2-%ED%8C%8C%EC%9D%B4%EC%8D%AC-Python-%EC%9A%94%EA%B2%A9-%EC%8B%9C%EC%8A%A4%ED%85%9C
이 문제는 쉽지만 자바로 한 번도 다뤄본 적 없는 내용들이 담겨 있었다.
이차원 배열의 정렬의 경우 다중조건을 설정할 수 있는데 파이썬에서는 아주 간단하지만 자바에서는 메서드를 사용해야 한다.
Arrays.sort(targets,
Comparator.comparing((int[] a) -> a[0])
.thenComparing((int[] a) -> a[1]));
위와 같이 Comparator의 comapring()메서드를 메서드체인을 통해 연결하여 사용할 수도 있고
Arrays.sort(targets,
(o1, o2) -> o1[0] != o2[0] ? o1[0] - o2[0] : o1[1] - o2[1]);
위와 같이 람다식을 사용해서 정렬할 수도 있다.
람다식 같은 경우에는 첫번째 원소가 같지 않다면 첫번째 원소를 기준으로 정렬하고 아니라면 두 번째 원소를 기준으로 정렬하라는 의미인데 람다식을 계속해서 이어나간다면 더 많은 조건을 설정할 수 있을 것 같다.
또 자바에서 이차원 배열을 바로 출력해보는 방법은 다음과 같다.
System.out.println(Arrays.deepToString(targets));