[99클럽 코테 스터디 2일차 TIL] 프로그래머스 - x만큼 간격이 있는 n개의 숫자
99클럽 코테 스터디 2일차 TIL 입니다.
[level 1] x만큼 간격이 있는 n개의 숫자 - 12954
성능 요약
메모리: 79.3 MB, 시간: 0.06 ms
문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한 조건
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.
입출력 예
2
5
[2,4,6,8,10]
4
3
[4,8,12]
-4
2
[-4, -8]
풀이 코드
x 숫자에 대한 구구단 값을 배열에 넣으면 되는 문제다. 구구단은 1부터 시작하니까 i + 1
로 곱한다.
돌아보기
처음 풀이 코드를 제출하고 실패 했는데 long
으로 캐스팅하지 않았기 때문이다. 왜냐하면 연산 결과가 정수형의 최대 크기를 넘어갔기 때문이다. 예를 들어 x 의 양수 최대 크기인 1000만과 n 의 최대 크기 1000 을 곱하면 100억이 되고 이는 정수형의 최대 크기 약 21억을 넘어가게 되기 때문에 실패하게 된다.
캐스팅을 하지 않고 x 에 1000만과 n 에 215 를 넣어서 로직을 돌려보면 215번째 값은 아래와 같은 수가 나오게 된다.
정수형 범위는 -2^31 - 1 ~ 2^31 -1 로 -2,147,483,648 ~ 2,147,483,647 이다. 그렇기 때문에 214번째에서 1000만을 더하는 순간 정수형의 최대 크기를 넘어서게 되고 최솟 값으로 돌아가 남는 수만큼 최솟 값에 더하게 된다.
따라서 x 값을 long
으로 캐스팅하고 i + 1
과 곱하게 되면 정수형보다 범위가 큰 long
타입으로 연산이 되기 때문에 문제없이 통과하게 된다.
개선하기
위 풀이 코드는 n 번동안 x 값을 long
타입으로 캐스팅하게 되면서 n 번의 형 변환 비용이 발생하게 된다. 이를 한번으로 줄이는게 좋을 것으로 보이며 아래와 같이 작성할 수 있다.
또한 StreamAPI 를 통해 가독성도 높이고 코드 또한 간결하게 작성할 수 있다.
대신 StreamAPI 는 성능 면에서 떨어질 수 있기 때문에 잘 알아보고 활용해야겠다.
다음에는
자료형의 범위에 대해 신경쓰기
형 변환 비용 생각하기
#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL
Last updated