나누어 떨어지는 숫자 배열

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의 갯수
whkim98
whkim98
꾸준히 내 것으로 만드는 게시글을 작성하자
  • whkim98
    내 일기장
    whkim98
  • 전체
    오늘
    어제
    • 분류 전체보기
      • JAVA
      • JavaScript
        • Node
        • React
      • PYTHON
      • GitHub
      • DJANGO
      • Project
        • Insty
        • ERP
      • Cloud
        • NAVER CLOUD Web DevOps
        • Public
      • 자격증
        • SQLD
        • 정보처리기사
        • ADsP
        • 리눅스마스터
        • AWS
      • 코딩테스트
        • 프로그래머스 Lv0
        • 프로그래머스 Lv1
      • Spring
      • Tools
        • Postman
        • eGov
      • WEB
      • CS
      • DevOps
  • 블로그 메뉴

    • 홈
    • GitHub
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바