[알고리즘] Swift 나누어 떨어지는 숫자 배열

이유진·2024년 3월 25일
0

알고리즘

목록 보기
25/32

문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.

divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.


제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

입출력 예

arrdivisorreturn
[5, 9, 7, 10]5[5, 10]
[2, 36, 1, 3]1[1, 2, 3, 36]
[3,2,6]10[-1]

입출력 예 설명

  • 입출력 예#1 arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.
  • 입출력 예#2 arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.
  • 입출력 예#3 3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.

풀이 과정

  1. 새로운 배열을 담을 상수 result를 만든다.
  2. filter 함수를 사용해 배열 arr에서 주어진 조건을 만족할 경우만 골라낸다.
  3. 이때 주어진 조건은 arr을 divisor로 나누었을 때 나머지가 0이 되는 경우! 클로저를 이용해서 배열의 각 요소($0)를 순회하며 계산하도록 한다!
  4. 새로운 배열 result가 비어 있으면(=조건을 만족하는 값이 없다면) -1 반환해주고
  5. 그렇지 않으면 배열 result를 sorted() 를 사용해 오름차순으로 반환해준다.

Solution

func solution(_ arr:[Int], _ divisor:Int) -> [Int] {
    
    let result = arr.filter { $0 % divisor == 0 }
    
    if result.isEmpty {
        return [-1]
    } else {
        return result.sorted()
    }
}

삼항 조건 연산자를 사용해 더 줄일 수 있다!

func solution(_ arr:[Int], _ divisor:Int) -> [Int] {

    let result = arr.filter { $0 % divisor == 0 }.sorted()
    return result == [] ? [-1] : result

}

3개의 댓글

comment-user-thumbnail
2024년 3월 25일

항상 발전해나가려고 노력하시는 유진님의 모습이 참 보기 좋습니다☺️ 오늘 못 봬서 아쉬웠어요~!! 오늘도 수고하셨고 내일 뵐게요~!

답글 달기
comment-user-thumbnail
2024년 3월 25일

요즘 저도 알고리즘 다시 풀려고 노력 중인데 정말 쉽지 않은 거 같아요... 포기 안하고 꾸준히 푸는 모습 본받아 저도 노력하게 되는 거 같아요!! 화이팅입니다!

답글 달기
comment-user-thumbnail
2024년 3월 26일

저번에 제가 어려워했던 문제군요,,, 유진님 너무 잘 푸셨네요!! 오늘도 파이팅입니다!!ㅎㅎ

답글 달기