Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- URL입력
- 자바
- 프로젝트 후기
- 사내시스템
- 알고리즘
- SBS 본사
- 오라클
- SBS 개발
- IT시스템개발
- 뷰 리액트 비교
- 리액트
- 경력직
- react
- 면접
- 간단 프로젝트
- Vue.js
- 1차면접
- 첫 React
- 백준
- 대문자
- CompositionAPI
- e-HR
- 웹 개발 면접 질문
- 뷰 리액트
- 뷰
- 첫 리액트
- 트리
- MySQL
- 백준알고리즘
- 쟈스
Archives
- Today
- Total
리주의 프로그래밍 공부
[11650] 좌표 정렬하기 본문
Arrays.sort는 최악의 경우, 시간 복잡도가 O(n^2)이라 사용하지 않았는데, 다른 사람들의 풀이를 보니, 이 문제에서는 사용해도 됐던 것 같다.
(Collections.sort는 Timsort를 사용하여 최악의 경우에도 O(n logn)을 보장한다. insert sort와 merge sort를 섞어쓴다고 한다.)
+
(Arrays.sort는 형에 따라 쓰는 알고리즘이 달라서 시간복잡도가 다르다고 한다.
int형으로 쓴다면, 자바는 Quicksort를 사용해서 최악의 경우 O(n^2)을 가지고,
Integer형으로 쓴다면, Mergesort로 O(n logn)을 가진다고 한다.
그렇다면 이 문제에서도 Integer로 쓴다면 걱정없이 Arrays.sort를 쓸 수 있을듯 하다.)
간단한 문제였음에도, 풀이 방법을 HashMap을 써가며 이렇게까지 풀었어야했나 싶은 생각이 들어서 많이 아쉽긴하다.
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
static int n,m;
static int[] arr;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
// x값을 key로, y값은 x가 중복일 경우를 위해, ArrayList로 value
HashMap <Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
int n = sc.nextInt();
for(int i=0; i<n; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
ArrayList<Integer> list = new ArrayList<Integer>();
// 같은 x값을 가진 좌표가 들어올 경우
if(map.containsKey(x)) {
list = map.get(x);
list.add(y);
// 정렬하기(정렬된 출력을 위해)
Collections.sort(list);
}else {
list.add(y);
}
// x라는 키값에 list라는 value 넣어주기
map.put(x, list);
}
// 좌표의 범위가 -100,000 ~ 100,000 이므로
for(int i=-100000; i<=100000; i++) {
// 키값으로 i가 존재하는가?(= x가 i인 좌표가 입력되었는가?)
if(map.containsKey(i)) {
for(int j=0; j<map.get(i).size(); j++) {
bw.write( i + " " + map.get(i).get(j) + "\n");
}
}
}
bw.flush();
}
}
'알고리즘 공부(백준)' 카테고리의 다른 글
[5639] 이진 검색 트리 (0) | 2021.03.24 |
---|---|
[1991] 트리 순회 (0) | 2021.03.22 |
[15652] N과 M (4) (0) | 2021.03.19 |
[15650] N과 M (2) (0) | 2021.03.19 |
[15651] N과 M (3) (0) | 2021.03.18 |