TIL ~ 24.04.05

두 정수 사이의 합

wlsds00_ 2023. 12. 19. 09:35

22. 두 정수 사이의 합

class Solution {
    fun solution(a: Int, b: Int): Long {
        var answer: Long = 0
        
        if (a < b) {
            for (i in a .. b) { 
                answer += i.toLong() 
            }
            return answer
        } else if (a > b) {
            for (i in b .. a) { 
                answer += i.toLong() 
            }
            return answer
        } else {
            return a.toLong()
        }
    }
}

 

오늘은 기쁜게 문제를 나 혼자 풀었다. 좀 길긴 하지만...

 

i 에 a 부터 b까지를 더해서 i를 long 으로 바꾸고 answer에 전부 더한 뒤 리턴해줬다.

 

그런데 처음에 이렇게 풀었을때는 세번때 예시가 자꾸 0으로 나왔다. 음... 혹시 for 안에서 a 부터 b까지가 순서대로 커지는 수만 계산할수 있나? 싶어서 급하게 if문 추가하고 좀 고민하다가 b 랑 a를 순서만 바꿔서 넣어봤다. 된다...

마지막에는 else if 를 한번 썼으니까 else 로 닫아줘야 하니까 닫고, 두 수가 같으면 아무거나 리턴해도 된대서 그냥 a를 long 으로 바꾸기만 하고 무식하게 넣었다. 이것도 타입 미스매치가 떠서 급하게 long으로 바꿨다.

 

그런데 사실 이 계산식... 처음에는 i를 map을 넣어서 계산했다가 풀이만 성공하고 한번 제출 실패했다.

왜? 싶어서 이리저리 만져보다가 우연히 맵까지 다 지운뒤로 성공했다. 성공은 했는데 이유를 모르겠어서 다른분 풀이를 찾아보니 이게 정답에 타입변환을 int -> long 이 되면 오류가 난단다. 알것같으면서도 모르겠어서 좀 더 검색을 해봤다.

 

int 여야만 그냥 정수로 표현이 되고, long 타입은 숫자로 쓰려면 뒤에 L을 붙여줘야 한다.

그런데 또 int 안에서 표현이 되는 숫자는 L을 안붙여도 된다고 한다.

아마 조건중에 a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. 가 있어서 그런게 아닐까 싶다.

표시할때 L을 붙인다는걸 알고는 있었는데 계산할때는 생각을 못했다. 어쩐지...