240123 TIL - 프로그래머스 문제 풀이

jkeum·2024년 1월 23일
0

TECHIT-BackendSchool

목록 보기
30/50

짝수는 싫어요

정수 n이 주어질 때, 홀수만 담은 배열(오름차순)을 리턴하는 문제였다.

import java.util.stream.IntStream;

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

깔끔하게 작성된 정답코드...
IntStream을 몰랐어서 List<Integer> list = new ArrayList<>();로 리스트를 생성하고 for문을 사용해서 홀수를 넣어줬다.
그런데 list를 바로 리턴할 수 없어서 찾아보니

int[] answer = list.stream()
                .mapToInt(i -> i)
                .toArray();

이렇게 쓰더라...
스트림을 정말 잘 써야겠다는 생각을 했다.

피자 나눠 먹기(2)

6조각씩 나눠져 나오는 피자를 n명이 모두 같은 개수의 조각을 먹으려면 총 몇 판을 주문해야 하는지 구하는 문제였다.

최소공배수를 구해야겠다는 생각이 들었다.
아직 최대공약수와 최소공배수 구하는 알고리즘을 외우지 못해서... 검색해봤다.
이전에는 이해하려고 하지 않고 그냥 가져다 써서 외우지 못했던 것 같다. 이해하니까 쉽다.

class Solution {
    public static int getGCD(int a, int b) {
        if (a % b == 0)
            return b;
        return getGCD(b, a % b);
    }
    
    public int solution(int n) {
        int gcd = getGCD(n, 6);
        return n / gcd;
    }
}

그냥 최소공배수를 구하면 조각의 개수가 되기 때문에 총 몇 판을 주문해야 하는지 알려면 6으로 다시 나눠야 한다.

그래서 최소공배수((n * 6) / gcd)에서 6을 곱하지 않고 바로 n / gcd를 했다.

profile
It's me, jkeum!

0개의 댓글