728x90
반응형
오늘 풀어본 문제는 난이도는 무난했지만 몇몇 테스트 케이스에서 통과되지 않는 이슈가 있었다.
문제
문제는 테스트 케이스 1번을 예를 들어보면 주어진 x부터 시작해
x만큼 증가하는 총 5개의 숫자를 LongArray 타입으로 리턴하면 되는 문제였다.
여기서 처음에 들었던 생각은 왜 굳이 LongArray 타입으로 리턴을 해야할까 였다.
그리고 이 의문은 문제를 채점할 때 해결(?)되었다.
풀이
처음 풀이는 위 사진의 풀이와 약간 달랐다.
말 그대로 약간 달랐는데 그 의미는 아예 달랐다.
for 문안에 실행문은 원래 아래와 같았다.
answer[i] = (x * (i + 1)).toLong()
위 문장과 풀이 사진 안의 실행문의 결과는 어떻게 다를까?
일반적인(Int 범위 안에서 해결이 되는) 상황에서는 두 코드는 정상적으로 동작한다.
만약, x가 1억이고 n은 30이라면?
일단 Int 타입은 4바이트이다. 이 때, 최댓값은 양수로는 21억 언저리이다.
그런데 n이 30이라면? 30억이라는 수가 리턴될 LongArray에 포함되어야 한다.
그런데 위의 코드블럭에서의 실행문으로 이를 처리하려한다면? 오버플로우 상황이 발생하지 않겠는가?
30억을 Long 타입으로 바꾸기 전에 이미 Int 타입으로 계산을 하면
21억이 넘어서는 숫자를 계산해야되는데 당연히 원하던 값이 나올 수 없다.
이번 문제를 통해 다음부터는 문제에서 주어진 입출력의 타입까지도 세세히 따져보아야 한다는 것을 깨달았다.
728x90
반응형
'프로그래머스' 카테고리의 다른 글
나누어 떨어지는 숫자 배열 코틀린(Kotlin) (0) | 2022.08.17 |
---|---|
나머지가 1이 되는 수 찾기 코틀린(Kotlin) (0) | 2022.08.16 |
약수의 합 코틀린(Kotlin) (0) | 2022.08.10 |
JadenCase 문자열 만들기 코틀린(Kotlin) (0) | 2022.08.09 |
자연수 뒤집어 배열로 만들기 코틀린(Kotlin) (0) | 2022.08.08 |