요르딩딩

과외문제 - 답 본문

[코딩테스트]/팁

과외문제 - 답

요르딩딩 2025. 1. 22. 15:21
728x90
반응형

# [크기가 5인], 1차원 정수형 배열 선언 및 그림 : int[] arr = new int[5];
 
# 정수형 리스트 선언 : ArrayList<Integer> list = new ArrayList<Integer>();
 
# [크기: 행2,열3]인 2차원 문자열 배열 선언 및 초기화 및 그림 : String[][]arr = new[2][3];
 
# 1차원 배열 [인덱스3]에 [10] 삽입 : arr[3] =10
 
# 2차원 배열 [행:5, 열:10]에 "v" 삽입 : arr[5][10] = "v";
 
# 접근제어자 

private  같클
default  같패
protect  다패,상속
public  전체


 
# overload : 메소드명 동일, 매계변수(타입 또는 갯수 다름)
# overriding : 재정의
 
# 클래스, 생성자, 메소드 선언
class A { // 클래스
   public A(){} //  생성자
   pulbic A(int a){} // 생성자 (overload)
   public int B() {return 5;} //메소드
   public void C() {} // 반환값 X
}
 
# 클래스 객체(인스턴스) 생성
A a = new A();
A a = new A(5);  // 생성자 (overload)
 
# 변수

정적변수 (static)  최초1번 초기화, 공유(유지) class A {
   static int num = 10;
   public A(){ num ++;}

   public static void main(~) {
       A a = new A(); // 인스턴스통해 접근
   }
}
전역변수 (static)  모든함수 접근가능 class A {
   static int num = 10;
   public static void main(~) {
      sysout(num); // 직접사용

   }
}
지역변수  블록내에서만 접근가능 -


 
# String, Char

String  여러 개의 문자(char)로 구성된 객체  "Hello, World!"
char  1개의 문자로 구성된 데이터 타입  'H'


* 문자열.charAt(인덱스) : 아스키값
 
# 정렬 (Arrays, Collection 사용)

배열  Arrays.sort(array)
리스트 Collections.sort(list)
리스트 (역방향)  Collections.reverse(list)


# 출력

배열  System.out.println(Arrays.toString(array));
리스트  System.out.println(list);


 
# 삼항연상자 : String result = (a > b) ? "a승" : "b승";
 
# 길이

배열 배열.length
리스트 리스트.size()


* 마지막 인덱스와 길이 구분 : 마지막 인덱스  = 길이 -1
 
# 복사

배열  int[] copy = Arrays.copyOf(원본배열, 원본배열.length);
리스트   List<Integer> copy = new ArrayList<>(원본리스트);


 
# 형변환

정수 <- 문자열 int number = Integer.parseInt("123");
실수 <- 문자열 double number = Double.parseDouble("123.45");
문자열 <- 정수 String str = String.valueOf(123);
또는 String str = Integer.toString(123);
문자열 <- 실수 String str = String.valueOf(123.45);
또는 String str = Double.toString(123.45);
문자열 대문자 String upperStr = "hello".toUpperCase();
문자열 소문자 String lowerStr = "HELLO".toLowerCase();


# 비교

== 객체의 참조(주소)를 비교 if (a == b)
equals()  객체의 내용(값) 비교 if (a.equals(b))


# 실수 출력 : 소수점한자리 : String.format("%.1f", num);
• %s: 문자열
• %d: 정수
• %f: 실수
• %x: 16진수로 변환된 정수

 

# 인터페이스 그림 및 장점 5가지

 

# Compareable, Comparator 차이

 

# iterable(Collection), iterator (map, listiterator) 그림

 

# List, Set, Map 특징 정리

      

# Map의 특징을 작성하세요.

   1. Map 

      { key : value}

      map.entrySet()  : map의 key와 value를 포함하는 Entry객체의 Set을 반
      map.KeySet() : 키를 모아서 Set형태로 반환 
      map.values() : values를 Collection형태로 반환 -> Collections.max(map.values()) 처럼 사용가능 
      map.entrySet().iterator() : map.entrySet() 이 리턴하는 Set 객체의 Iterator를 사용

      map.getOrDefault(i.0)+1 : map에 key가 i인 값이 없다면 0, 있다면 해당 value 반환 후 +1

 

# ArrayList를 Iterator로 선언 후  반복문 예시를 들어 보시오. 

   ArrayList<Integer> list = new ArrayList<Integer>();

 : Iterator<Integer> a = list.iterator(); // 선언

 : for(iterator.hasNext()){

   int n = iterator.next();

   }

 

# ArrayList를 HashSet으로 선언하세요.

   : Set<Integer> set = new HashSet<>(list);

 

# 제네릭 장점

1. 코드의 재사용성

2. 타입의 안정성 : 컴파일 시점에 타입을 검사해서 런타임 오류를 방지

3. 형변환 필요없음

 

T : 임이의 타입 / Box<T> : 제네릭 타입을 일반적으로 표현 할때 사용

E : 컬렉션의 요소 타입 / List<E>
( 동일한 동작/ 가독성을 위해 구분)

 

# 람다 

1. 함수형 인터페이스(메서드 1개만 존재)에서만 사용가능

2. 간결하게 표현 / 병렬처리에 유용

3. 자바에서 제공하는 함수형 인터페이스 활용가능 ( Suppiler, Consumer, Function, Predicate)

4. 스트림, 컬렉션과 자주 사용.

 

[예시]

interface MyFunc {
    void sayHello();
}

public class Main {
    public static void main(String[] args) {
        MyFunc func = () -> System.out.println("Hello!");
        func.sayHello();
    }
}

 

 

[함수형 인터페이스 종]

Runnable run() X X 아무것도 받지 않고 실행만 함 () -> System.out.println("작업 시작")
Supplier<T> get() X O 값을 생성해서 반환  () -> "Hello"
Consumer<T> accept(T t) O X 값을 받아서 사용만 하고 반환 없음 (출력) (x) -> System.out.println(x)
Function<T, R> apply(T t) O O 값을 받아서 변환한 뒤 반환 (변환) (x) -> x * x
Predicate<T> test(T t) O boolean 조건 검사해서 true/false 반환 (검사) (x) -> x > 10
BiFunction<T, U, R> apply(T t, U u) 2개 O 두 개의 값을 받아서 변환 후 반환 (a, b) -> a + b

 

import java.util.*;

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + "(" + age + ")";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> list = Arrays.asList(
            new Person("Alice", 25),
            new Person("Bob", 20),
            new Person("Charlie", 23)
        );

        list.sort(Comparator.comparing(p -> p.age));

        System.out.println(list); // [Bob(20), Charlie(23), Alice(25)]
        
        list.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName)); // 두번 정렬

	list.sort(Comparator.comparing(p -> p.age).reversed()); // 반대방향
    }
}

 

# 스트림 패키지

. 스트림이란 : 일련의 데이터 흐름

. 패키지란 : 클래스의 집합

 

   - 특징 : 가독성 향상/ 병렬처리를 통해 속도 업/ 유지보수성 향상 

      -> 스트림을 사용하기전에는 테이터를 컬렉션으로 처리했었음. (코드가 길다는 단점)

      -> 하나하나 기술하는 '명령형'방식이 X, '선언적' 코딩 가능 

      -> 멀티 스레드로 병렬로 처리하고, 처리 후에 합침 -> 빠르고 쉽다.

        (스트림은 간단하게 Parallel() 또는 ParallelStream() 연산으로 병렬처리 가능.)

      -> stream 생성 -> 가공(중간연산) -> 소비(최종연산)

         (최종연산은 1번만 가능/ 지연평가 (Lasy Evaluation))

 

** 생성 **

- 컬렉션은 스트림 메소드 지원, 배열 또한 Arrays.stream(arr)으로 생성 가능

- Stream.generate(() -> "Hello").limit(5) : 무한한값 생성

- Stream.iterate(1, n -> n*2).limit(5); : 다음 요소를 생성하기위해 이전 요소에 의존해서 만듦.

 

- java.util.stream 패키지의 IntStream클래스 : 정수형 데이터 스트림연산 수행을 위해 사용

   - IntStream st = IntStream.rangeClosed(1,100);

     Stream<Integer> st2 = Stream.iterate(1, n -> n+1).limit(100);

 

| 메소드                              | 설명                                                                 |
|------------------------------------|----------------------------------------------------------------------|
| `Stream.of(T... values)`           | 주어진 요소들로 스트림을 생성합니다. (배열, 가변 인자)               
| `Stream.empty()`                   | 비어있는 스트림을 생성합니다.                                         
| `Stream.iterate(T seed, UnaryOperator<T> f)` | 주어진 시드를 시작으로, 지정된 함수를 적용하여 요소를 생성하는 스트림을 생성합니다. |
| `Stream.generate(Supplier<T> s)`   | 주어진 `Supplier`를 사용하여 무한한 스트림을 생성합니다.               
| `Arrays.stream(T[] array)`         | 배열에서 스트림을 생성합니다.                                          
| `IntStream.range(int startInclusive, int endExclusive)` | 주어진 범위의 정수로 스트림을 생성합니다. (끝은 미포함)       
| `IntStream.rangeClosed(int startInclusive, int endInclusive)` | 주어진 범위의 정수로 스트림을 생성합니다. (끝 포함)
| `LongStream.range(long startInclusive, long endExclusive)` | 주어진 범위의 long으로 스트림을 생성합니다. 
| `LongStream.rangeClosed(long startInclusive, long endInclusive)` | 주어진 범위의 long으로 스트림을 생성합니다. (끝 포함)             
| `DoubleStream.range(double startInclusive, double endExclusive)` | 주어진 범위의 double로 스트림을 생성합니다.      
| `DoubleStream.rangeClosed(double startInclusive, double endInclusive)` | 주어진 범위의 double로 스트림을 생성합니다. (끝 포함)             

 

** 중간연산 **

| 연산자                             | 설명                                                     |
|----------------------------------|--------------------------------------------------------
| filter(Predicate)               | 조건에 맞는 요소만 남김                                    
| map(Function)                   | 각 요소를 다른 값으로 변환                                 
| flatMap(Function)               | 중첩된 스트림 평탄화 (2차원 → 1차원)                      
| mapToInt(ToIntFunction)         | 각 요소를 int 스트림으로 변환                             
| mapToLong(ToLongFunction)       | 각 요소를 long 스트림으로 변환                            
| mapToDouble(ToDoubleFunction)   | 각 요소를 double 스트림으로 변환                          
| mapToObj(Function)              | 기본형 스트림 → 객체 스트림 변환                          
| distinct()                      | 중복 요소 제거                                             
| sorted()                        | 자연 순서로 정렬                                           
| sorted(Comparator)              | 사용자 정의 기준으로 정렬                                   
| limit(long maxSize)             | 결과 개수를 최대 N개로 제한                                 
| skip(long n)                    | 처음 N개의 요소 건너뜀                                      
| peek(Consumer)                  | 각 요소를 살펴보고, 디버깅 용도로 사용                      
| takeWhile(Predicate)            | 조건이 참인 동안 요소 추출 (Java 9 이상)                   
| dropWhile(Predicate)            | 조건이 거짓이 될 때까지 요소 건너뜀 (Java 9 이상)          

 

** 최종연산 **

| 메소드                    | 설명                                                                                             |
|--------------------------|--------------------------------------------------------------------------------------------------|
| `reduce()`                | 요소들을 결합하여 단일 값으로 축소하는 연산 (누적)                                               
| `collect()`               | 스트림의 요소들을 다른 형태로 수집 (예: List, Set 등)                                           
| `forEach()`               | 각 요소에 대해 동작을 수행하는 연산                                                              
| `forEachOrdered()`        | 병렬 스트림에서 요소 순서를 보장하며 동작을 수행                                                
| `toArray()`               | 스트림의 모든 요소를 배열로 반환                                                                 
| `min()`, `max()`          | 스트림에서 최소값/최대값을 반환                                                                  
| `count()`                 | 스트림의 요소 개수 반환                                                                          
| `anyMatch()`, `allMatch()`| 조건을 만족하는 요소가 하나라도 있으면 true, 모든 요소가 만족하면 true                          
| `noneMatch()`             | 모든 요소가 조건을 만족하지 않으면 true                                                          
| `findFirst()`, `findAny()`| 첫 번째/아무 요소를 반환                                                                         
| `sum()`, `average()`      | 숫자 스트림에서 합계/평균 반환                                                                   
| collect(Collector)              | 스트림 결과를 컬렉션/맵/문자열로 변환                       

   : 수집하여 원하는 형태로 변환

   -> Java Collector 인터페이스를 매개변수로 호출하는데, Java에서 제공하는 Collectors클래스에서

     이미 존재하는 method를 이용해서 요소 변환

 

   -> Collectors제공 메소드

      - toList()

      - toSet()

      - toColllection() : 원하는 컬렉션으로 변환 예) Collectors.toCollection(ArrayList:new)

      - toMap()

      - toArray()

      - joining(",") : ,로 붙이기

      - naturalOrder()

      - comparingInt(String::length)

728x90
반응형

'[코딩테스트] > ' 카테고리의 다른 글

과외문제  (0) 2025.01.22
팁 *** 정렬/변환  (0) 2022.04.26
팁 ***  (0) 2022.04.05
Comments