개발/코테문제풀이

백준 11651번 문제풀이 자바

후누피 2023. 5. 20. 14:07
728x90


문제이해

N값으로 좌표의 갯수를 입력받는다.

N=5라면 5개의 좌표를 입력받고 y좌표를 기준으로 내림차순정렬한다.

y좌표값이 같다면, x좌표를 내림차순형태로 해서 정렬해준다.

 

풀이코드

/*  백준 11651번 문제풀이)

    2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

    입력)
    첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다.
    둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다.
    (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

    출력)
    첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
 *
 */
package test_0520;

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

public class test_0520_1 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("좌표의 갯수 N을 입력하세요");
 
       입력받을 좌표갯수
        int N = in.nextInt();
       좌표를 담을 배열을 생성
        int [][] xy = new int [N][2];
 
        좌표의 값들을 입력해준다.
        for(int i=0; i<N; i++){
            System.out.println(i+"번쨰 x좌표값을 입력하세요.");
            xy[i][0]=in.nextInt();
            System.out.println(i+"번째 y좌표값을 입력하세요.");
            xy[i][1]=in.nextInt();
        }
        제일 중요한 정렬해주는 부분
        Arrays.sort(xy,(xy1,xy2)->{ 람다식을 사용했다.
            if(xy1[1]==xy2[1]){  두개의 좌표를 비교하여, y값이 같다면
                return xy1[0]-xy2[0];    x축값을 비교해주는 부분이다. 결과값이 양수면 자리가 교체된다.
            }else{ y축값이 같지않다면
                return xy1[1]-xy2[1];    y축값을 비교하여 양수일때 자리가 교체된다.
            }
        });
        for(int i=0; i<N; i++){ 정렬이 끝난 좌표배열을 순서대로 출력시켜준다.
            System.out.println(xy[i][0]+" "+xy[i][1]);
        }
    }
}

 

1. 좌표의 갯수 N을 입력받는다.

2. 좌표를 담을 배열을 생성해준다.

3. 좌표의 값들을 배열에 입력해준다.

4. 람다식을 이용해 배열을 정렬해준다.

5. 정렬된 배열을 순서대로 출력해준다.

 

*람다식 : 메서드를 사용하지않고 메서드를 하나의 식으로 표현한 것이다.

(매개변수,...)->{실행문} 형태로 사용한다.

 

ex)

(int a, int b)->{return a+b;}

 

 

결과

 

728x90