알고리즘/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));