나누어 떨어지는 숫자 배열

2024. 4. 3. 19:11·코딩테스트/프로그래머스 Lv1

 

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        int count = 0;
        
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0){
                count++;
                answer = new int[count];
            }
        }
        
        if(count == 0){
            answer = new int[1];
            answer[0] = -1;
        }
        
        count = 0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0){
                answer[count] = arr[i];
                count++;
            }
        }
        int temp = 0;
        for(int i = 0; i < answer.length - 1; i++) {
			for(int j = i + 1; j < answer.length; j++) {
				if(answer[i] > answer[j]) { 
					temp = answer[i];
					answer[i] = answer[j];
					answer[j] = temp;
				}
			}
		}
        
        
        
        return answer;
    }
}

풀긴 했지만 정말 쓰레기 같은 코드라고 코딩하는 내내 생각했다....

return되는 배열의 갯수가 나누어 떨어지는 갯수와 같아야 하기 때문에 갯수 선언을 위해 for문을 한 번 돌렸다. 

 

후에, 갯수를 위해 돌렸던 for문에 있던 count가 0이라면 나누어 떨어지는 수가 없는 것이기 때문에 -1로 고정을 했다.count를 다시 초기화 시키고 조건이 충족되어 count가 올라가면 그 배열 인덱스에 해당 arr값을 넣어준 후 정렬을 시켜 for문을 총 3번이나 돌리는 끔찍한 코드가 되어버렸다. (이중 for문까지 하면 4개...)

 

코드를 이런 식으로 짜면 정렬하는 과정에서 배열의 모든 요소를 반복하면서 최솟값을 찾아 앞쪽으로 옮기는 방식으로 동작하며, 시간 복잡도가 정말 꽝이다. 

 

 

다른 사람들의 풀이를 보니 공부 욕구가 생기는 생각지도 못한 코드들이 많았다.

 


import java.util.Arrays;

class Solution {
  public int[] solution(int[] arr, int divisor) {
          int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
          if(answer.length == 0) answer = new int[] {-1};
          java.util.Arrays.sort(answer);
          return answer;
  }
}

이 코드는 코드 길이의 차이부터 해서 Arrays.stream(arr)을 사용하여 배열을 스트림으로 변환하고, filter() 메서드를 사용하여 주어진 조건에 해당하는 요소를 필터링한다. 

 

훨씬 간결하고 가독성 좋은 코드라고 생각하며 오늘도 하나 배워간다.

 


 

출처: 프로그래머스 코딩 테스트 연습  https://programmers.co.kr/learn/challenges

저작자표시 (새창열림)

'코딩테스트 > 프로그래머스 Lv1' 카테고리의 다른 글

문자열 내림차순으로 배치하기  (2) 2024.04.03
수박수박수박수박수 ~~~  (0) 2024.04.03
두 정수 사이의 합  (2) 2024.04.03
문자열 내 p와 y의 갯수  (0) 2024.04.03
x만큼 간격이 있는 n개의 숫자  (0) 2024.04.03
'코딩테스트/프로그래머스 Lv1' 카테고리의 다른 글
  • 문자열 내림차순으로 배치하기
  • 수박수박수박수박수 ~~~
  • 두 정수 사이의 합
  • 문자열 내 p와 y의 갯수
kwh_coding
kwh_coding
성장하는 괴물 성괴 김우형
  • kwh_coding
    코딩 일기
    kwh_coding
  • 전체
    오늘
    어제
    • 분류 전체보기
      • JAVA
      • JavaScript
        • Node
        • React
      • PYTHON
      • GitHub
      • DJANGO
      • ERP Project
      • NAVER CLOUD Web DevOps
      • 자격증
        • SQLD
        • 정보처리기사
        • ADsP
      • 코딩테스트
        • 프로그래머스 Lv0
        • 프로그래머스 Lv1
      • Spring
      • Tools
        • Postman
        • eGov
      • WEB
      • CS
  • 블로그 메뉴

    • 홈
    • GitHub
    • Notion
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    eGov
    Tomcat
    javascript
    git
    코테
    RDBMS
    gitbash
    React
    CORS
    github
    node
    html
    SQLD
    django
    jsp
    Java
    annotation
    해시 암호화
    Postman
    코딩
    코딩테스트
    정보처리기사
    private network
    프로그래머스
    brycpt
    web
    Python
    spring
    AdSP
    js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kwh_coding
나누어 떨어지는 숫자 배열
상단으로

티스토리툴바