230115 프로그래머스 나누어 떨어지는 숫자 배열(자바/자바스크립트)

샨티(shanti)·2023년 1월 15일
0

코딩테스트

목록 보기
22/35

매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅

오늘 푼 문제는 '나누어 떨어지는 숫자 배열'

배열이라는 제목을 보고 어려울 것 같아서 윽!! 했던 문제인데 예전에 풀었기도 했고 또 난이도도 아주 극극 하.
물론 예전이야 어려웠겠지만..ㅎㅎ
근데 중간에 문제가 좀 바뀌었나보다. 다른 사람들의 풀이를 보니 현재 문제 조건들에 부합하지 않는 부분들이 있기에 확인하실 분들은 고려해서 참고할 것.

java와 javascript에서 종종 헷갈렸던 부분이 바로 배열정렬, 즉 sort이다.
단순하게 오름차순으로 정렬하고 싶을 때 sort()를 사용하면 '내가 생각한 대로' 정렬이 될 것이라 생각했는데 문자열 정렬에선 그렇지 않은 경우들이 있었다. 우선 오늘은 문제에 나왔던 int 타입만 고려해서 간략히 정리.

아참. 아래 예시들은 '자바'에 해당하는 예시다.

int[] array = new int[]{1, 21, 11, 1111, 111};

Arrays.sort(array);

// array의 현재 정렬 상태는?
// 답: {1, 11, 21, 111, 1111}
// Arrays.sort() 메서드는 오름차순 정렬.

그럼 내림차순 정렬 방법은?

int[] array = new int[]{1, 21, 11, 1111, 111};

// int 타입의 요소들을 Integer 객체로 변환한 array를 새로 생성
Integer[] mappedArray = Arrays.stream(arr).boxed().toArray(Integer[]::new);

// 변환한 array를 아래와 같이 내림차순 정렬
Arrays.sort(mappedArray, Collections.reverseOrder());

// array의 현재 정렬 상태는?
// 답: {1, 21, 11, 1111, 111}

// mappedArray의 현재 정렬 상태는?
// 답: {1111, 111, 21, 11, 1}

물론 프론트로 커리어를 정한 이상 자바보다는 자바스크립트, 타입스크립트를 더 자주 접하게 되겠지만
하루 한 문제씩 자바를 접하면서 문법을 계속 리마인드 하고 익혀야겠다.

프로그래머스 코딩테스트 나누어 떨어지는 숫자 배열


문제


java solution

요즘 자바 문제를 풀다보면 왠지 자바스크립트처럼 풀게되는 것 같다는 생각이 드는데 ㅎㅎㅎ 아무래도 stream을 사용하면 그런 느낌이 든다.
오늘은 stream을 활용해서, 그리고 for문을 활용해서 풀어봤는데.
for문을 사용하려니 새삼 '어떻게 사용하더라?' 고민하게 되더라.
자바스크립트에서도 for문을 사용하지 않으려 노력하다보니 자바에서 연습을 하지 않으면 곰방 까먹겠단 생각이..ㅎㅎ

여튼 오늘의 자바 풀이는 2가지. for문이 있는것과 없는 것.

solution 1. for문을 사용하지 않은 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        Arrays.sort(arr);

        int[] filteredArray = Arrays.stream(arr).filter(value -> value % divisor == 0).toArray();

        return filteredArray.length != 0 ? filteredArray : new int[]{-1};
    }
}

solution 2. for문을 사용한 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        Arrays.sort(arr);

        List<Integer> result = new LinkedList<>();

        for (int value : arr) {
            if (value % divisor == 0) {
                result.add(value);
            }
        }

        if (result.size() != 0) {
            return result.stream().mapToInt(Integer::intValue).toArray();
        }

        return new int[]{-1};
    }
}

javascript solution

다른 사람들의 풀이를 보니 거의 한 줄에서 끝나던데...
뭐 어쨌든 두줄로 정리했다. 문제가 쉬운 편이라서 금방 해결은 되었는데, 다른 방법은 없을까? 고민도 되었던 문제...

function solution(arr, divisor) {
  const resultArray = arr.sort((a, b) => a - b).filter((value) => value % divisor === 0);

  return resultArray.length === 0 ? [-1] : resultArray;
}

아마 다음주 문제부터 난이도가 슬슬 올라갈텐데,
예전에 풀지 못했던 문제들을 다시 마주하면서 이번엔 꼭 풀어내고 싶다는 마음이 크다.
특히 카카오 기출문제들....
점점 실력을 늘리면서 적어도 코딩테스트에 발목잡히는 일은 없기를 바라며!!
화이팅!!


profile
가벼운 사진, 그렇지 못한 글

0개의 댓글