[코테 매일 풀기 11일차] 1119

HAHAING·2025년 11월 20일

코딩 테스트

목록 보기
21/30
post-thumbnail

1. 백준 11650 좌표 정렬하기

아이디어

  • 정렬 -> 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();
        //정렬

    }

}

2. 프로그래머스 lv1. k번째 수

아이디어
문제: array의 i번째~j번째 까지 자르고 정렬하고 k번째 있는 수 구하기

  • 배열 복사 후 정렬해야함. int[] tmp = Arrays.copyOfRange(array, s-1, e);
  • 리스트에 tmp[k-1] 추가한다.
  • 리스트를 Array로 바꿈 list.stream().mapToInt(Integer::intValue).toArray();

Stream() 기초 문법 및 예시 코드

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

Stream 중간 연산에서 자주 쓰이는 가공 메서드

  • filter() : 특정 조건에 부합하는 stream 전개
  • map(): 매핑처리로 리스트내 모든 값을 키/값 형태로 처리한다.
  • sorted(): 알파벳 순으로 정렬
  • reduce(): 모든 과일을 하나의 문자열로 연결한다.
  • distinct(): 중복된 값을 제거하고 출력
  • limit(long maxSize): 처음부터 maxSize개의 값을 출력한다.
  • skip(long n): 처음 n개의 값을 제외한 나머지값 출력

Stream 최종연산에서 자주 쓰이는 메서드

  • forEach(Consumer action): 각 요소에 대해 주어진 action을 실행한다
  • count(): 스트림의 요소 수를 반환
  • collect(Collector<T, A, R> collector): 스트림의 요소를 수집하여 Collection, List, Set, Map 등의 컬렉션에 저장하는 최종 연산
  • toArray(): 스트림의 요소를 배열로 반환하는 최종 연산
  • reduce(T identity, BinaryOperator accumulator): 스트림의 요소를 identity로 초기화한 후, accumulator 연산을 반복하여 값을 줄여나가는 최종 연산 예시코드에서는 더하기연산으로 문자열을 이어쓰는 형태로 활용하였다
  • min(Comparator comparator): 스트림에서 최소값을 반환
  • max(Comparator comparator): 스트림에서 최대값을 반환
  • anyMatch(Predicate predicate): 스트림에서 predicate 조건을 만족하는 요소가 하나라도 있는지 확인
  • allMatch(Predicate predicate): 스트림의 모든 요소가 predicate 조건을 만족하는지 확인

3. 백준 2750 수 정렬하기

4. 백준 1181 단어 정렬

아이디어

  • 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();
    }
}
profile
따뜻한 시선으로 세상을 변화시키는 데이터사이언티스트

0개의 댓글