[백준,BOJ 11650] 좌표 정렬하기(JAVA 구현, 재풀이)

2019. 11. 12. 13:19·CodingTest/백준 온라인 저지(BOJ)
반응형

-내 생각

  단계별 풀어보기에 정렬 카테고리로 분류되어있는 11650번 좌표 정렬하기 문제이다. 문제 자체의 이해는 어렵지 않고 기준에 따라 정렬해야 하기 때문에 Comparator 인터페이스를 오버 라이딩 후 재정의해 풀어야겠다고 생각했다.

 

-해법

import java.util.*;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);	
		
		int n= sc.nextInt();
		
		int arr[][]=new int[n][2]; //x좌표 y좌표
		
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
				arr[i][j] = sc.nextInt();
			}
		}
		
		Arrays.sort(arr,new Comparator<int[]>() { //Comparator 인터페이스 재정의

			@Override
			public int compare(int[] o1, int[] o2) {
				
					
				 if(o1[0]==o2[0])// x좌표의 값이 같다면 y좌표를 기준으로 정렬		
					return Integer.compare(o1[1], o2[1]);
					
					return Integer.compare(o1[0], o2[0]); // 나머지는 x좌표를 기준으로 정렬
			
			}		
			
		});
		
		for(int i=0;i<arr.length;i++) {
	
				System.out.println(arr[i][0]+" "+arr[i][1]);
		
		}
		
	}
	
}

 


  이 문제 역시 재풀이를 했으며, Comparator 인터페이스에 대한 사용법이 익숙하지 않다 아직도. 

Arrays.sort(arr,new Comparator<int[]>() { //Comparator 인터페이스 재정의
							// 여기서 int[] 는 2차원 배열에서 하나의 행을 기준으로 비교한다는 의미이다.
			@Override
			public int compare(int[] o1, int[] o2) { // 따라서 여기서 o1,o2는 최초 1번째 행과 0번째 행을 의미하며 행단위로 비교된다.
								 // o1이라고 첫 번째 행을 의미하는 것이 아니다. o1은 다음에 있는 행을 의미, o2는 기준이 되는 행을 의미한다.
					
				 if(o1[0]==o2[0])// x좌표의 값이 같다면 y좌표를 기준으로 정렬		
					return Integer.compare(o1[1], o2[1]);  // o1이 다음 행이므로 다음행의 y좌표가 기준 o2행의 y좌표보다 작으면 -1이 리턴되므로 두 행의 위치를 바꾸게 된다.
					
					return Integer.compare(o1[0], o2[0]); // 나머지는 x좌표를 기준으로 정렬
                    									// 마찬가지로 o1이 다음 행이므로 다음행의 x좌표가 기준 o2행의 x좌표보다 작으면 -1이 리턴되므로 두 행의 위치를 바꾼다.
			
			}		
			
		});

  위의 개념으로 각각의 변수가 무엇을 의미하며, 리턴 값에 따라 어떻게 정렬이 이루어지는 지에 대해 반복적으로 숙달해야 할 것 같다. 

저작자표시 (새창열림)
'CodingTest/백준 온라인 저지(BOJ)' 카테고리의 다른 글
  • [백준,BOJ 10814] 나이순 정렬(JAVA 구현,재풀이)
  • [백준,BOJ 11651] 좌표 정렬하기 2(JAVA 구현)
  • [백준,BOJ 1427] 소트인사이드(JAVA 구현)
  • [백준,BOJ 2108] 통계학(JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    백준2751
    백준7576
    백준1260
    component-scan
    프로그래머스
    boj1427
    medium
    백준
    BOJ
    Java
    자바
    next 14
    백준1427
    leetcode 2236
    boj2108
    TypeScript
    백준7576자바
    Easy
    meidum
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[백준,BOJ 11650] 좌표 정렬하기(JAVA 구현, 재풀이)
상단으로

티스토리툴바