아이디어
- 정렬 -> Comparator를 람다식으로 표현하기 ->
Arrays.sort(xy, (a, b) -> { if (a[0] != b[0]) { return a[0] - b[0]; } else { return a[1] - b[1]; } });- 추가적 방법
(삼항 연산자)
Arrays.sort(xy, (a,b)-> a[0] !=b[0] ? a[0]- b[0] : a[1]-b[1]
(Compator 메서드 체이닝)
Arrays.sort(xy, Comparator.comparingInt(int[] a) -> a[0]).thenComparingInt(a-> a[1]));
package boj_silver.p11650_좌표정렬;
import java.io.*;
import java.util.*;
//좌표정렬: x-> y
public class Review2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[][] xy = new int[n][2];
for (int i = 0; i<n; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
xy[i][0] = a;
xy[i][1] = b;
}
Arrays.sort(xy, (a,b) -> {
if (a[0] !=b[0]) {
return a[0] - b[0];
}else{
return a[1] - b[1];
}
});
for (int[] num: xy){
int a = num[0];
int b = num[1];
System.out.println(a + " " + b);
}
br.close();
//정렬
}
}
아이디어
문제: array의 i번째~j번째 까지 자르고 정렬하고 k번째 있는 수 구하기
- 배열 복사 후 정렬해야함.
int[] tmp = Arrays.copyOfRange(array, s-1, e);- 리스트에 tmp[k-1] 추가한다.
- 리스트를 Array로 바꿈
list.stream().mapToInt(Integer::intValue).toArray();
Stream API는 collection, array등의 데이터를 다루기 위한 함수형 프로그래밍 방식을 제공한다. 기능을 구현하지 않고, 선언형으로 컬랙션 형을 처리할 수 있다. (반복문, 조건문)
생성하기 - 가공하기 - 결과 만들기
List<String> fruits = Arrays.asList("apple", "banana", "apple" "orange", "kiwi", "watermelon");
//1. filter()로 원하는요소 출력하기
fruits.stream() //stream 생성
.filter(fruit-> fruit.startwiith("a")) //가공하기
.forEach(System.out::println); //결과 만들기
// 출력: apple apple
// 2. map(): 매핑처리로 리스트 내 모든 값을 키_값 형태로 처리한다.
fruits.stream()
.map(fruit -> fruit.toUpperCase())
.forEach(System.out::println);
// 출력: APPLE BANANA APPLE ORANGE KIWI WATERMELON
//3. sorted()
fruits.stream()
.sorted()
.forEach(System.out::println);
// 출력: apple apple banana kiwi orange watermelon
//4. reduce()
String result = fruits.stream()
.reduce("", (s1, s2)-> s1+s2);
System.out.println(result);
//5. distinct()
fruits.stream()
.distinct()
.forEach(System.out::println);
// 출력: apple banana orange kiwi watermelon
//6. limit()
fruits.stream()
.limit(3)
.forEach(System.out::println);
// 출력: apple banana apple
//7. skip()
fruits.stream()
.skip(2)
.forEach(System.out::println);
// 출력: apple orange kiwi watermelon
//8. count()
long count = fruits.stream()
.count();
System.out.println(count); //출력: 6
아이디어
- TreeSet으로 중복 제거 + 자동 정렬 => sb.append()로 출력
TreeSet<String> set = new TreeSet<>((a, b) -> {
if(a.length() != b.length()){
return a.length() - b.length();
}
return a.compareTo(b);
})
for (String word: set){
sb.append(word).append("\n");
}
package boj_silver.p1181_단어정렬;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class Review2_treeset {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb= new StringBuilder();
int n = Integer.parseInt(br.readLine());
//treeset: 중복 제거 + 자동 정렬
TreeSet<String> set = new TreeSet<>((a,b) -> {
if(a.length() != b.length()){
return a.length() - b.length();
}
return a.compareTo(b);
});
// for (int i = 0; i < strArr.length; i++) {
// sb.append(strArr[i] + "\n");
// }
for (int i = 0; i<n; i++){
set.add(br.readLine());
}
for (String word: set){
sb.append(word).append("\n");
}
System.out.println(sb);
br.close();
}
}