2024. 3. 13. 10:09, 💡Algorithm
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12910
접근
- 1. arr의 원소 개수만큼의 반복문 작성
- 2. arr의 원소 중 divisor로 나누어 나머지가 0인 값을 배열 returnArray에 저장
- 3. 만약 1의 과정에서 returnArray에 아무 값이 없다면 배열에 -1을 담아 리턴
- 4. 값이 하나라도 있다면 오름차순으로 배열한 returnArray를 리턴. 이 정도로 구상했다.
//구상, 오류 코드
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
lateinit var returnArray : IntArray
for(i in arr){
if (arr[i] % divisor == 0 ) returnArray.plus(arr[i])
}
when(returnArray.size){
0 -> return returnArray.plus(-1)
else -> return returnArray.sortedArray()
}
}
}
- returnArray라는 것을 만들어주고 안에서 원소를 더하려고 했는데, 초기화가 문제였다.
- lateinit으로 초기화가 될 줄 알았는데 오류가 난다. 문제점은 아래와 같다.
- (1) returnArray가 초기화되지 않았다.
- returnArray는 lateinit var로 선언되었지만 초기화되지 않았다.
- returnArray를 초기화할 때 IntArray의 생성자를 호출해야 한다. (var returnArray = intArrayOf()) - (2) plus 함수의 사용이 잘못되었다.
- returnArray.plus(arr[i])는 returnArray에 arr[i]를 추가하는 것이 아니다.
- plus 함수는 배열에 요소를 추가하는 것이 아니라 새로운 배열을 반환하는 함수이다.
- 따라서 이 코드는 실제로 returnArray를 수정하지 않는다.
- returnArray에 원소를 추가하고 싶으면 그냥 단순하게 += 를 사용하면 된다. - (3) for문의 식이 잘못되었다.
- for(i in arr)는 0부터 arr의 주소 갯수만큼 꺼내주는 게 아니라! arr에 있는 원소를 처음부터 끝까지 꺼내주는 거다.
- 따라서 i는 원소 각각의 값이 나오기 때문에, arr[i]가 아닌 i로 식을 적어야 한다.
성공 코드
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
var returnArray = intArrayOf()
for(i in arr){
if (i % divisor == 0 ) returnArray += i
}
when(returnArray.size){
0 -> return intArrayOf(-1)
else -> return returnArray.sortedArray()
}
}
}
설명
- arr의 원소 각각을 비교할 반복문인 for문을 작성한다.
- arr의 원소 중 divisor로 나누어 나머지가 0인 값을 배열 returnArray에 저장한다.
- 위 과정을 모두 수행한 뒤 for문을 빠져나오고,
returnArray에 아무 값이 없다면 배열에 -1을 담아 리턴,
값이 있다면 배열 returnArray를 오름차순으로 정렬하고 리턴한다.
다른 방법
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
val answer = arrayListOf<Int>()
for (i in arr){
if (i % divisor == 0) answer.add(i)
}
if (answer.size == 0){
answer.add(-1)
}
return answer.sorted().toIntArray()
}
}
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
var answer = intArrayOf()
arr.forEach { if (it % divisor == 0) answer += it }
answer.sort()
if (answer.size == 0) answer += -1
return answer
}
}
반응형
💬 C O M M E N T