[CodingTest] 짝수는 싫어요

hye·2023년 3월 5일
0

AlgorithmTest

목록 보기
26/95

📖 Exam

문제 설명

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

제한 조건

  • 1 ≤ n ≤ 100

입출력 예

nresult
10[1, 3, 5, 7, 9]
15[1, 3, 5, 7, 9, 11, 13, 15]
  • 입출력 #1
    10 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9]를 return합니다.

  • 입출력 #2
    15 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9, 11, 13, 15]를 return합니다.


✍ Answer

class Solution {
    public int[] solution(int n) {
        int[] answer = (n%2==0) ? new int[n/2] : new int[n/2+1];

        for(int i=0; i< answer.length; i++){
            answer[i] = i*2+1;
        }

        return answer;
    }
}

💡 Realization

  • 주말에 레벨 1에서 정답률 60% 가니까 생각했던 것보다 난이도가 있어서 두 문제 실패해서 못올렸었다. 개념 공부 위해 책 읽으면서 해야할 수준에 도달 한 듯하다.

  • 짝수는 싫어요 문제 풀어봤냐는 질문에 풀기 시작했데 레벨 0은 난이도가 너무 낮을꺼 같아 외면했던 애들인데 얘네는 하루 2문제씩 후딱 풀어버리면 좋을꺼같다.

IntStream

  • 스트림은 써본 적이 없어 볼 때마다 신기하고 새롭다.
  • IntStream.rangeClosed() 는 스트림을 통하여 while, do-while, for를 간결하게 처리할 수 있는 방법이다.

참고사이트 : https://blog.naver.com/ding-dong/221386518751

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int n) {
        return IntStream.rangeClosed(0, n)
        .filter(value -> value % 2 == 1)
        .toArray();
    }
}

List

  • 배열 선언은 List 통해서 크기 선언하지 않아 편하지만 코테에서는 효율성이 떨어진대서 내가 시도하지않은 방법 중 하나.
    하지만 알고는 있어야하고, return 된 부분은 steam() 사용한 것으로 숙지가 필요하다.
import java.util.List;
import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        List<Integer> answer = new ArrayList<>();
        for(int i=1; i<=n; i++){
            if(i % 2 == 1){
                answer.add(i);
            }
        }
        return answer.stream().mapToInt(x -> x).toArray();
    }
}

mapToInt

Stream

Java에서 스트림(Stream)은 컬렉션, 배열, I/O 자원 등의 데이터 소스로부터 데이터를 읽어오거나 쓸 때 사용하는 추상화된 개념입니다. 스트림은 데이터를 처리하는데 사용되는 함수형 인터페이스들과 함께 사용되어 함수형 프로그래밍을 가능하게 합니다.

스트림은 크게 다음과 같은 특징을 갖습니다:

  1. 스트림은 데이터를 저장하지 않습니다. 대신, 데이터 소스로부터 실시간으로 읽어오며, 이에 대한 중간 연산(intermediate operation)과 최종 연산(terminal operation)을 수행하여 결과를 출력합니다.

  2. 스트림은 일회용입니다. 한 번 사용하면 소비된 스트림은 다시 사용할 수 없습니다.

  3. 스트림은 지연 연산(lazy evaluation)을 수행합니다. 중간 연산들은 실제 데이터가 처리되기 전에 수행되지 않으며, 최종 연산이 호출될 때까지 기다립니다.

  4. 스트림은 병렬 처리(parallel processing)를 지원합니다. 컬렉션의 요소를 병렬로 처리하여 처리 속도를 높일 수 있습니다.

스트림은 크게 생성, 중간 연산, 최종 연산으로 구성됩니다. 생성은 데이터 소스로부터 스트림을 생성하는 것이며, 중간 연산은 데이터를 가공하거나 걸러내는 등의 작업을 수행하고, 최종 연산은 결과를 출력하는 작업을 수행합니다.

스트림의 사용은 다음과 같이 이루어집니다:

List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList
    .stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

이 코드는 myList의 요소 중 "c"로 시작하는 문자열만 걸러내어 대문자로 변환한 뒤, 오름차순으로 정렬하여 출력하는 코드입니다.

참고사이트: https://ryan-han.com/post/dev/java-stream/

참고사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120813/solution_groups?language=java

profile
Junior Backend Developer

0개의 댓글