-
[백준]11651번: 좌표 정렬하기 2 | 배열 정렬, 람다식 | 코딩테스트알고리즘 2023. 8. 10. 12:21
문제: https://www.acmicpc.net/problem/11651
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { // 2차원 평면 x축, y축 // 입력, 계산, 출력 // 입력 : N개의 점(x, y) // - int x, int y -> int[] Scanner sc = new Scanner(System.in); int N = sc.nextInt(); // 점의 개수 N -> N개 만큼의 점(x, y쌍)이 존재 -> N번 반복 int[][] pointArr = new int[N][2]; // 감싸주는게 먼저 카운트가 들어가야함 for (int i = 0; i < N; i++) { // N에 비례해서 자동으로 N번 스캔 // 점마다의 x, y 쌍을 받아오는 것 (2번. x에 대한 것 y에 대한 것) int x = sc.nextInt(); int y = sc.nextInt(); // System.out.println("x : " + x + " y : " + y); int[] point = new int[2]; // 2개의 자리 point[0] = x; point[1] = y; // 일반적으로 쓰는 좌표는 (x,y) 형태라서... pointArr[i] = point; } sc.close(); // 계산 : (1) y좌표가 증가하는 순 (2) x좌표가 증가하는 순 // 정렬하는 기준, y좌표가 먼저, x좌표가 다음 // 증가하는 순 => 오름차순(인덱스가 증가하는 순) Arrays.sort(pointArr, (e1, e2) -> { if (e1[1] != e2[1]) { return e1[1] - e2[1]; // y끼리의 차이로 정렬 // sort : +면 e1이 뒤로 가고, -면 e2가 뒤로 가고, 0이면 그대로. } else { // 2개의 y좌표가 같을 떄 return e1[0] - e2[0]; } }); // 비교의 기준이 되는 메서드가 들어감. // 메서드를 외부에서 별도로 정의하지 않고도 넣어주는 방법 // 람다식 : (매개변수) -> { 메서드의 본문(실행문) } // https://www.w3schools.com/java/java_lambda.asp // 출력 : 정렬한 결과를 출력 for (int[] point : pointArr) { // System.out.println(point[0] + " : " + point[1]); System.out.println(point[0] + " " + point[1]); } } }
- 람다식 : (매개변수) -> { 메서드의 본문(실행문) } : https://www.w3schools.com/java/java_lambda.asp
Java Lambda Expressions
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
그대로 제출했더니
허허;;
코드를 간결하게 바꾸겠다.
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[][] pointArr = new int[N][2]; for (int i = 0; i < N; i++) { int x = sc.nextInt(); int y = sc.nextInt(); int[] point = new int[2]; // 2개의 자리 point[0] = x; point[1] = y; pointArr[i] = point; } sc.close(); Arrays.sort(pointArr, (e1, e2) -> { if (e1[1] != e2[1]) { return e1[1] - e2[1]; } else { return e1[0] - e2[0]; } }); for (int[] point : pointArr) { System.out.println(point[0] + " " + point[1]); } } }
맞았다.
'알고리즘' 카테고리의 다른 글
큐 구현하기 | ArrayList, LinkedList, ArrayDeque (0) 2023.08.10 스택과 큐의 기본 개념 | visualgo.net (0) 2023.08.10 [프로그래머스] k번째 수 | 정렬 | 코딩테스트 (0) 2023.08.09 [프로그래머스] 제일 작은 수 제거하기 | 배열, 리스트 | 코딩테스트 (0) 2023.08.09 [백준]개수 세기 | 배열 | 코딩테스트 (0) 2023.08.09