sm 기술 블로그
[단계별] 백준 (답) java (88~) 본문
88. 10814
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
String [][] S = new String[N][2];
for(int i = 0; i < N; i++){
st = new StringTokenizer(br.readLine()," ");
S[i][0] = st.nextToken();
S[i][1] = st.nextToken();
}
Arrays.sort(S, (S1, S2)->{
return Integer.parseInt(S1[0]) - Integer.parseInt(S2[0]);
});
for(int i = 0; i < N; i++){
sb.append(S[i][0] + " " + S[i][1] + "\n");
}
System.out.println(sb);
}
}
String -> Int
만약 람다식을 쓰지 않는다면,
Arrays.sort(S, new Comparator<String[]>() {
public int compare(String[] s1, String[] s2) {
return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
}
});
객체를 이용하여 푸는 방법
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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));
int N = Integer.parseInt(br.readLine());
Person[] p = new Person[N];
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
p[i] = new Person(age, name);
}
// 타입을 Person 으로 둘 것.
Arrays.sort(p, new Comparator<Person>() {
public int compare(Person s1, Person s2) {
return s1.age - s2.age;
}
});
StringBuilder sb = new StringBuilder();
for(int i = 0; i < N; i++) {
// 객체배열의 객체를 출력하면 해당 인덱스의 객체의 toString() 이 출력 됨
sb.append(p[i]);
}
System.out.println(sb);
}
public static class Person {
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public String toString() {
return age + " " + name + "\n";
}
}
}
toString() 메소드는 객체를 출력할 때, 사용자의 임의로 출력하고자 하는 문자열을 지정할 수 있다.
StringBulider를 이용한 방법
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// 입력되는 나이의 범위 : 1 ~ 200
StringBuilder[] p = new StringBuilder[201];
for(int i = 0; i < p.length; i++) {
p[i] = new StringBuilder();
}
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
// 카운팅 정렬 : 나이를 index 로 하여 해당 배열에 나이와 이름을 append() 한다
p[age].append(age).append(' ').append(name).append('\n');
}
StringBuilder sb = new StringBuilder();
for(StringBuilder val : p) {
sb.append(val);
}
System.out.println(sb);
}
}
나이를 인덱스로 사용함.
나이가 중복이 되더라도 문제 없음 -> 인덱스 에 값을 저장하는게 아니라 StringBulider에 저장함.
81. 18870
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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));
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 n : sorted){
if(!rankingMap.containsKey(n)){
rankingMap.put(n, rank);
rank++;
}
}
StringBuilder sb = new StringBuilder();
for(int key : origin){
int ranking = rankingMap.get(key);
sb.append(ranking).append(' ');
}
System.out.println(sb);
}
}
코드압축은 규칙을 가지고 (숫자가 낮은순으로) 코드를 정렬하는 것이다.
그림으로 살피면
https://coding-factory.tistory.com/556
위는 Hashmap을 선언하는 방법이다.
'문제 > 백준_자바' 카테고리의 다른 글
93. 10816(숫자 카드2) (0) | 2022.06.20 |
---|---|
92. 1620(나는야 포켓몬 마스터 이다솜) (0) | 2022.06.19 |
91. 14425 (문자열 집합) (0) | 2022.06.19 |
90. 10815(숫자카드) (0) | 2022.06.19 |
[단계별] 백준 (답) java (1~87) (0) | 2022.04.18 |
Comments