https://school.programmers.co.kr/learn/courses/30/lessons/12910
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 나누어 떨어지는 숫자 배열 *
array의 각 element 중 divisor로 나누어 떨어지는 값을
오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
* 제한사항 *
arr은 자연수를 담은 배열
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j]
divisor는 자연수
array는 길이 1 이상인 배열
* 알고리즘 분석과 이해 *
이 알고리즘은 배열(arr)에서 "divisor"로 나누어 떨어지는 값들을 찾아서
오름차순으로 정렬한 배열을 반환하는 것이죠
그리고
만약 나누어 떨어지는 값이 하나도 없다면 -1을 반환해야 해요
* 로직구상 *
먼저 배열을 순회하면서 "divisor"로 나누어 떨어지는 값을 찾아야 하겠고
또 찾은 값을 다른 배열에 저장 해야하겠죠?!
그러기 위해서 반복문과 나머지 연산자 (%)의 쓰임을 생각해볼 수 있겠고
빈 배열 선언을 통해 나누어 떨어지는 값을 추가하고
저장된 배열을 오름차순으로 정렬하고 정렬된 배열을 반환해주면서
만약에 배열이 비어있다면 -1을 반환해주는 로직을 구상해보는데
이를 위해서 정렬 메서드를 사용하고
배열이 비어있는지 확인하기 위해서
"isEmpty" 프로퍼티를 사용해 볼 필요가 있습니다.
* 코드구성 *
func solution(_ arr:[Int], _ divisor:Int) -> [Int] {
정수 배열과 정수 하나를 받아줍니다.
정수 배열은 arr로, 정수 하나는 divisor로 받습니다.
반환값은 정수 배열입니다.
var result: [Int] = []
그리고
결과를 저장할 배열이 필요하기 때문에 "result"라는 이름의 빈 배열을 먼저 선언하고
이 배열에는 나누어 떨어지는 값을 저장할 예정입니다.
for num in arr {
그리고 입력된 배열(arr)을 순회하며 각 요소를 가져올 것 입니다.
이렇게 하면 배열의 모든 요소를 확인할 수 있겠습니다.
if num % divisor == 0 {
그리고 배열의 각 요소를 "divisor"로 나눈 나머지가 "0"인지 확인해주기 위해서
이렇게 함으로써 divisor로 나누어 떨어지는 값인지 확인할 수 있습니다.
result.append(num)
나누어 떨어지는 값이라면, 해당 값을 결과 배열에 추가시켜주고
나누어 떨어지지 않는 값은 결과 배열에 추가되지 않게 해줍니다.
여기서 사용된 append()는 배열에 새로운 요소를 추가하는 메서드입니다.
이 메서드를 사용하면 배열의 끝에 원하는 값을 추가할 수 있게 됩니다.
이를 활용해서 결과 배열에 나누어 떨어지는 값들이 추가되는 것이죠.
result.sort()
"divisor"로 나누어 떨어지는 값들이 정렬된 상태로 저장될 수 있도록
모든 값이 추가된 결과 배열을 오름차순으로 정렬합니다.
여기서 사용된 "sort()"는 배열을 정렬하는 메서드이며,
배열의 요소들을 원하는 순서로 재배치할 수 있습니다.
때문에 "divisor"로 나누어 떨어지는 값들이
정렬된 상태로 저장되어 있는 배열을 얻을 수 있는 것 입니다.
return result.isEmpty ? [-1] : result
결과 배열이 비어있는지 확인하고
비어있다면, 문제에서 요구하는 대로 -1을 포함한 배열을 반환하고
비어있지 않다면, 정렬된 결과 배열을 반환해줍니다.
여기서 ".isEmpty" 는 배열이 비어있는지 여부를 확인하는 프로퍼티이며
이 프로퍼티는 배열이 비어있으면 true를 반환하고, 비어있지 않으면 false를 반환합니다.
? 는 옵셔널 체이닝 연산자이죠
이 연산자를 사용해서 옵셔널 값이 nil인 경우에도
안전하게 메서드나 프로퍼티에 접근할 수 있게 되는 것이죠.
따라서 result.isEmpty ? [-1] : result는
result 배열이 비어있으면, 즉 나누어 떨어지는 값이 하나도 없다면 [-1]을 반환하고
"result" 배열이 비어있지 않으면, 나누어 떨어지는 값들이 오름차순으로 저장되어 있는 result 배열을 반환합니다.
총코드는 아래와 같습니다.
func solution(_ arr:[Int], _ divisor:Int) -> [Int] {
// 나누어 떨어지는 값을 저장할 배열
var result: [Int] = []
// 배열을 순회하면서 나누어 떨어지는 값을 찾음
for num in arr {
if num % divisor == 0 {
result.append(num)
}
}
// 결과 배열을 정렬
result.sort()
// 결과 배열이 비어있는지 확인하여 -1 또는 정렬된 배열을 반환
return result.isEmpty ? [-1] : result
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 핸드폰 번호 가리기 (0) | 2024.03.06 |
---|---|
[Swift]Programmers - 음양 더하기 (2) | 2024.03.05 |
[Swift]Programmers - 서울에서 김서방 찾기 (0) | 2024.02.29 |
[Swift] Programmers - 콜라츠 추측 (0) | 2024.02.28 |
[Swift]Programmers - 두 정수 사이의 합 (2) | 2024.02.27 |