[백준 11650번: 좌표 정렬하기] java 풀이

Elmo·2022년 7월 27일
0

[백준] 알고리즘

목록 보기
12/39

람다식을 이용하여 해결하는 문제

람다식을 모를 때 선택정렬을 이용하여 풀었다가 시간초과가 돼버렸다...
결국 인터넷을 검색해서 풀 수 밖에 없었다.

이 문제를 자바로 풀 때는 람다식을 이용하여 Arrays.sort를 확장하는 방법을 사용한다.

참고링크 : https://st-lab.tistory.com/110
위의 블로그에 자세히 설명되어있다.

간단히 정리하면 comparator 안에 있는 compare 메소드를 오버라이드하여 문제를 해결할 수 있도록 메소드 내용을 수정해야한다.

  • point[][] 배열에 x좌표값, y좌표값을 받는다
  • Arrays.sort를 이용할 때 람다식을 이용한다. 두 x좌표의 값이 다르면 x좌표끼리 정렬하고, x좌표의 값이 같으면 y좌표끼리 정렬한다.

🔑 java 풀이

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int point[][] = new int[N][2];

		for(int i=0; i<N; i++) {
			point[i][0]=sc.nextInt();
			point[i][1]=sc.nextInt();
		}
		
		Arrays.sort(point,(e1,e2)->{
			if(e1[0]==e2[0]) {
				return e1[1]-e2[1];}
			else {
				return e1[0]-e2[0];}
		
		});
		
		for(int i=0; i<N; i++) {
			System.out.println(point[i][0]+" "+point[i][1]);
		}				
	}
}

가끔 자바에서 오버로드와 오버라이드의 차이점을 헷갈릴 때가 있다.

🔔 오버로드

  1. 같은 클래스이거나 상속관계
  2. 메소드 이름은 같지만 매개변수 타입,개수 등이 달라야한다.
  3. 정적 바인딩(컴파일타임)

🔔 오버라이드

  1. 상속관계
  2. 매개변수, 메소드 이름 등이 모두 같아야함.
  3. 동적 바인딩(런타임)

람다식을 이용하지 않고 풀어보려 했는데 잘 되지 않았다...다른 방식으로 풀려면 c언어를 이용해야될듯.

profile
엘모는 즐거워

0개의 댓글