❓ 두 정수 사이의 합
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
💡 풀이
class Solution {
fun solution(a: Int, b: Int): Long {
var sum: Long = 0;
for(i: Int in Math.min(a, b)..Math.max(a, b)){
sum += i;
}
return sum;
}
}
- sum 값을 저장할 변수를 Long타입으로 선언한다.
- Math.min(a, b) / Math.max(a, b)로 a와 b 중 최소값과 최대값을 구분하여 반복문을 돌린다.
- Math.min(a, b)는 a와 b를 비교하여 더 작은 값을 반환한다.
- Math.max(a, b)는 a와 b를 비교하여 더 큰 값을 반환한다.
- i를 반복할 때마다 더해 sum 값에 저장해준 뒤 return 해주면 된다.
처음에 풀었던 풀이는 조금 달랐는데, 아래와 같은 코드를 작성했었다.
class Solution {
fun solution(a: Int, b: Int): Long {
var sum: Int = 0;
for(i: Int in Math.min(a, b)..Math.max(a, b)){
sum += i;
}
return sum.toLong();
}
}
sum을 Int 타입으로 선언하고, 리턴할 때 toLong으로 변환하여 반환했더니 일부는 정답, 일부는 오답으로 처리되면서 문제를 통과하지 못했었다. 이 이유를 아래 Int와 Long의 차이를 통해 알아보자.
1. Int
Int의 크기는 4byte로 32비트의 정수를 표현한다.
-2,147,483,648 ~ 2,147,483,647 범위의 모든 숫자를 저장 할 수 있는 것이다.
var intValue: Int
intValue = 2147483647
2. Long
Long의 크기는 8byte로 64비트의 정수를 표현한다.
-9,223,372,036,854,775,808부터 9,223,372,036,854,775,807 (-2E63 ~ 2E63-1)의 모든 숫자를 저장할 수 있는 것이다.
또한, Long타입의 숫자는 뒤에 L을 붙여 Int와 구분될 수 있도록 한다.
var longValue: Long
longValue = 2147483647L
따라서, 처음 풀었던 나의 풀이가 틀렸던 이유는 sum을 Int로 선언함으로 인해, Int의 범위를 넘어섰기 때문이다.
늘 int, double만 사용하던 나의 타입에 새로운 타입 Long이 들어옴으로 인해 좀 더 복잡해졌다...!
'Kotlin' 카테고리의 다른 글
Kotlin 문법 : sort와 sorted (with. 프로그래머스) (0) | 2024.06.05 |
---|---|
Kotlin 문법 : filter (with. 프로그래머스) (0) | 2024.05.14 |
Kotlin 문법 : Char와 String (with. 프로그래머스) (0) | 2024.05.09 |
Kotlin 문법 : split / toCharArray / toList (with. 프로그래머스) (0) | 2024.05.08 |
Kotlin 문법 : when 구문 (with. 프로그래머스) (0) | 2024.05.08 |