TIL 20240619 num_list.last()와 num_list[num_list.size - 1]의 차이

2024. 6. 19. 11:28개발일지

  1. num_list.last():
    • last()는 코틀린에서 제공하는 확장 함수다.
    • 이 함수는 배열의 마지막 요소를 반환한다.
    • 코드가 더 간결하고 읽기 쉬워진다.
    • 예외 처리가 내장되어 있어, 배열이 비어 있을 경우 NoSuchElementException을 발생시킨다.
  2. num_list[num_list.size - 1]:
    • 배열의 인덱스를 직접 사용하여 마지막 요소에 접근하는 방법이다.
    • 배열의 길이에서 1을 뺀 인덱스를 사용하여 마지막 요소를 가져온다.
    • 이 방법은 더 명시적이며, 배열의 길이를 직접 계산해야 한다.
    • 인덱스가 범위를 벗어나면 ArrayIndexOutOfBoundsException이 발생한다.

 

 

코테를 풀다가 알게 된거 다시 메모하기,,,

 

class Solution {
    fun solution(num_list: IntArray): IntArray {
        var answer = num_list.toMutableList()
        if (num_list[num_list.size - 1] > num_list[num_list.size  - 2]){
            answer.add(num_list.last() - num_list[num_list.size  - 2])
        } else {
            answer.add(num_list.last() * 2)
        }
        return answer.toIntArray()
    }
}

 

이건 되는데,,, 아래는 왜 안될까를 찾아봤다...

음,, 별 차이가 없는거 같은데,, 하고 ㅋㅋㅋㅋ ㅠㅠ

class Solution {
    fun solution(num_list: IntArray): IntArray {
        var answer = num_list.toMutableList()
        if (num_list[num_list - 1] > num_list[num_list - 2]){
            answer.add((num_list.size - 1) - (num_list.size - 2))
        } else {
            answer.add((num_list.size - 1) * 2)
        }
        return answer.toIntArray()
    }
}

 

찾아보니 이는 아래와 같다..

  1. 잘못된 인덱스 접근: 이는 배열의 요소를 인덱스로 사용하려고 하기 때문에 Type mismatch 오류가 발생하므로 num_list[num_list - 1]와 num_list[num_list - 2]는 올바른 접근 방식이 아니라고 한다...
  2. 잘못된 계산: answer.add((num_list.size - 1) - (num_list.size - 2))는 배열의 요소를 기준으로 계산하는 것이 아니라 배열의 크기를 기준으로 계산하고 있다. 

 

그니까,, 음 배열의 요소를 기준으로 size - 2인값은 나누는 것은 상관없지만,,

이 것이,,, 요소가 아닌 인덱스로 사용하려고 하는 것이므로 올바른 답안을 받지 못하는 거였다,,, 허허 

근데 찾아봤는데,, 알거 같기도 하고,, 확실하게 알겠다!!! 는 아니랄까,,?

아직 막 와닿진 못했다.. 다시 풀면서 알아가야겠당 ㅠㅠ

 

 

ㅋㅋㅋ 

아 여기서 반전,,,

 

class Solution {
    fun solution(num_list: IntArray): IntArray {
        var answer = num_list.toMutableList()
        if (num_list[num_list.size - 1] > num_list[num_list.size  - 2]){
            answer.add(num_list[num_list.size - 1] - num_list[num_list.size  - 2])
        } else {
            answer.add(num_list[num_list.size - 1] * 2)
        }
        return answer.toIntArray()
    }
}

 

ㅋㅋㅋㅋㅋㅋㅋ 아 블로그를 거의 다 작성하고 알게 된 사실인데,,, 걍 내가 잘못 썼던 거였다!! 

음,, 작성하면서도 왜 안될까 흠,, 이랬는뎈ㅋㅋ ㅠㅠ 다시 읽어보니 뭔가 이상한거 아닌가!!

제대로 풀고 바보짓했네,,, ㅎㅎ

아 왜 안되나 했네 ㅋㅋㅋㅋㅋ

 

대괄호 안에

 size 라고 명시해둬야 했고,,,

num_list[num_list.size - 1]

 

이렇게 확실하게 적어야 했던거다.. 그냥 인덱스 값만 넣으니 안된거지,,, 참 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

어이가 없넼ㅋㅋㅋ

 

무튼 이해는 대강 했다!!!! 

머쓱해야하면서 끝,,,