728x90
8단계 : 11650번 / 좌표 정렬하기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public 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 N = Integer.parseInt(br.readLine()); // 점의 개수 : N
int[][] loc = new int[N][2]; // 좌표 배열 : loc
// 공백 단위로 데이터를 가공하기 위함.
StringTokenizer st;
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
loc[i][0] = (Integer.parseInt(st.nextToken()));
loc[i][1] = (Integer.parseInt(st.nextToken()));
}
// Arrays 라이브러리 내장 정렬 사용
// x좌표가 동일하다면 y좌표 순으로 정렬 (람다식 사용)
Arrays.sort(loc, (e1, e2) ->{
if (e1[0] == e2[0]){
return e1[1] - e2[1];
} else {
return e1[0] - e2[0];
}
});
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(loc[i][0]+" "+loc[i][1]).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
// Comparator를 사용
Arrays.sort(loc, new Comparator<int[]>() {
public int compare(int[] e1, int[] e2) {
if(e1[0] == e2[0]){
return e1[1] - e2[1];
} else {
return e1[0] - e2[0];
}
}
});
BufferedReader(), StringTokenizer 사용
Arrays 라이브러리의 sort() 메소드 사용 (람다식 이용)
Arrays.sort() 메소드는 첫번째 매개변수로 정렬하고자 하는 대상, 두번째 매개변수로 정렬 기준을 설정할 수 있다.
9단계 : 11651번 / 좌표 정렬하기 2
sort 메소드의 두번째 메소드인 람다식을 y좌표를 먼저 비교 후, 같은 경우 x좌표를 비교하도록 수정하면 되는 문제이다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public 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 N = Integer.parseInt(br.readLine()); // 점의 개수 : N
int[][] loc = new int[N][2]; // 좌표 배열 : loc
// 공백 단위로 데이터를 가공하기 위함.
StringTokenizer st;
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
loc[i][0] = (Integer.parseInt(st.nextToken()));
loc[i][1] = (Integer.parseInt(st.nextToken()));
}
// Arrays 라이브러리 내장 정렬 사용
// (수정 부분!) y좌표가 동일하다면 x좌표 순으로 정렬 (람다식 사용)
Arrays.sort(loc, (e1, e2) ->{
if (e1[1] == e2[1]){
return e1[0] - e2[0];
} else {
return e1[1] - e2[1];
}
});
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(loc[i][0]+" "+loc[i][1]).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
10단계 : 1181번 / 단어 정렬
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
public 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 N = Integer.parseInt(br.readLine()); // 단어의 개수 : N
String[] words = new String[N]; // 단어 배열
// 단어 입력 받기
for(int i=0; i<N; i++){
words[i] = br.readLine();
}
// 단어 정렬 (길이순)
Arrays.sort(words, new Comparator<String>() {
public int compare(String s1, String s2){
if (s1.length() == s2.length()){
return s1.compareTo(s2); // 길이가 같다면 사전 순 비교
} else {return s1.length() - s2.length();}
}
});
StringBuilder sb = new StringBuilder();
// ArrayIndexOutOfBoundsException 방지
sb.append(words[0]).append("\n");
for(int i=1; i<N; i++){
if (!words[i].equals(words[i-1])){
sb.append(words[i]).append("\n");
}
}
bw.write(sb.toString());
bw.flush();
}
}
Arrays.sort() 의 두번째 매개변수를 활용하여 조건설정을 잘 할 수 있느냐가 주요 부분.
11단계 : 10814번 / 나이순 정렬
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public 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 N = Integer.parseInt(br.readLine());
String[][] judge = new String[N][2]; // [0]: 나이, [1]: 이름
StringTokenizer st;
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
judge[i][0] = st.nextToken();
judge[i][1] = st.nextToken();
}
Arrays.sort(judge, new Comparator<String[]>() {
public int compare(String[] s1, String[] s2){
return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
}
});
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(judge[i][0]+" "+judge[i][1]).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
12단계 : 18870번 / 좌표 압축
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;
public 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 N = Integer.parseInt(br.readLine());
int[] origin = new int[N]; // 원본 배열
int[] sorted = new int[N]; // 정렬 할 배열
HashMap<Integer, Integer> rankingMap = new HashMap<Integer, Integer>();
// 원본 배열 입력 받기
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++){
sorted[i] = origin[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(sorted); // 배열 정렬
int rank = 0;
for(int v : sorted){
if(!rankingMap.containsKey(v)){
rankingMap.put(v, rank);
rank++;
}
}
for(int key : origin) {
int ranking = rankingMap.get(key);
bw.write(ranking+" ");
}
bw.flush();
}
}
sorted 배열에 HashMap을 사용하여서, 압축된 rank 값 추출한다.
HashMap을 사용하여 origin 배열에 rank 값을 맵핑한다.
728x90
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
백준 - 단계별로 풀어보기 - JAVA (12단계 : 브루트 포스 / 5문제) (2023.1.1 일) (0) | 2022.12.30 |
---|---|
백준 - 단계별로 풀어보기 - JAVA (11단계 : 재귀 / 6문제) (2022.12.31 토) (0) | 2022.12.30 |
백준 - 단계별로 풀어보기 - JAVA (10단계 : 정렬 (1) / 7문제) (2022.12.29 목) (0) | 2022.12.28 |
백준 - 단계별로 풀어보기 - JAVA (9단계 : 2차원 배열 / 3문제) (2022.12.28 수) (0) | 2022.12.28 |
백준 - 단계별로 풀어보기 - JAVA (8단계 : 기본 수학 2 / 6문제) (2022.12.27 화) (0) | 2022.12.27 |