알고리즘 - 프로그래머스 나누어 떨어지는 숫자 배열 (Swift)

2020. 7. 20. 10:14Algorism

반응형

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. 주어진 배열의 값을 각각 주언진 값으로 나누어 나머지가 0인 경우의 값들을 반환한다.
2. 반환할때는 오름차순으로 정렬한다.
3. 반환할 값이 0일 경우에는 [-1]을 반환한다.

 

풀이방법은 

 

1. 주어진 값들에 대하여 for문을 실해하여

2. for문 안에서 주어진 divisor값으로 나누어 0이되는 값들을 새로운 배열에 넣어주고

3. for문이 종료한 이후에 새로운 배열의 값을 정렬해준다.

4. 새로운 배열에 값이 있으면 배열을 반환해주고, 없을 경우는 [-1]을 반환해주면 되는!? 문제입니다.

 

하지만 이렇게하면 코드양이 많아지기 때문에 고차함수를 사용하여 풀어보았습니다.

# 진행방식은 동일합니다.

 

1. firter함수를 사용하여 내부 값들에 대해서 1개식 값들을 비교합니다.

2. divisor으로 나누어 값이 0이 되는 값들을 리턴합니다.

3. sorted함수를 사용하여 값을 오름차순으로 정렬합니다.

4. 3항 연산자를 사용하여 resultArray의 값이 있을경우에는 resultArray배열을 반환 아닐경우에는 [-1]배열을 반환 합니다.

func solution(_ arr:[Int], _ divisor:Int) -> [Int] {
    let resultArray = arr.filter { $0 % divisor == 0 }.sorted()
    return resultArray.count == 0 ? [-1] : resultArray
}

print(solution([2, 36, 1, 3], 1))

 

반응형