hahn

단계별로 풀어보기(정렬 - 좌표 정렬하기) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(정렬 - 좌표 정렬하기)

hahn 2021. 9. 18. 10:48
728x90
반응형

11650번: 좌표 정렬하기 (acmicpc.net)

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

http://boj.kr/2e435144dbe24685adf686651ec46862

 

공유 소스 보기

 

www.acmicpc.net

더보기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

class Main{
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int coordinateCount = Integer.parseInt(br.readLine()),
			key;
			
		StringTokenizer st;
		
		Map<Integer, ArrayList<Integer>> coordinateMap = new HashMap<Integer, ArrayList<Integer>>();
		List<Integer> keyMap;
		
		for(int i = 0; i < coordinateCount; i++) {
			
			st = new StringTokenizer(br.readLine(), " ");
			
			key = Integer.parseInt(st.nextToken());
			
			if(coordinateMap.get(key) == null) coordinateMap.put(key, new ArrayList<Integer>());
			
			coordinateMap.get(key).add(Integer.parseInt(st.nextToken()));
			
		}
		
		keyMap = new ArrayList<Integer>(coordinateMap.keySet());
		
		Collections.sort(keyMap);
		
		for(int mapKey : keyMap) {
			
			coordinateMap.get(mapKey).sort(Comparator.naturalOrder());
			
			for(int i = 0; i < coordinateMap.get(mapKey).size(); i++) {
				
				bw.write(mapKey + " " + coordinateMap.get(mapKey).get(i) + "\n");
				
			}
			
		}
		
		bw.close();
        
    }
    
}

 

Map 정렬 후,

 

정렬된 순서대로 불러와 Map 안의 ArrayList 정렬 후 출력했다.

728x90
반응형