개발/코테문제풀이
백준 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