오늘은 코드카타를 진행하던 와중에 자료형의 범위를 생각하지 못해 발생한 문제가 있었다.
따로 정리해두었다!
https://velog.io/@amberjack/C으로-풀기-x만큼-간격이-있는-n개의-숫자
대충 정리하자면, -10000000 <= x <= 10000000인 x와 n <= 1000인 n이 있고, answer[] 배열에 x부터 시작해서 x 간격으로 n만큼의 숫자들을 저장해서 return하는 문제였다.
이 문제를 해결하기 위해 for문을 사용해서 x * i
를 long형 배열 answer[]에 넣는 방법을 생각했다.
long형이 int형보다 크기 때문에 암시적으로 형변환이 있을 것이라 판단한 나는 문제가 없을 것이라 속단했던 것이다.
내가 시도한 코드
public long[] solution(int x, int n) { long[] answer = new long[n]; for (int i = 1; i <= n; i++) { answer[i - 1] = x * i; } return answer; }
하지만 제출을 해보니 2문제나 틀렸다. 이유를 생각하다보니 괜히 long형 배열을 사용한 것이 아닐 것이라 생각하고, 문제의 원인이 x * i
에서 결과 값이 int형보다 커서 오버플로우가 발생하는 것이라고 판단했다. 때문에 i를 long형으로 선언해서 곱셈을 할 때 x * i
가 long형이 되도록 수정을 했고, 이 방법으로 제출을 하니 해결할 수 있었다.
Stack과 Heap 메모리, 값 형식과 참조 형식의 차이에 대한 특강을 들었다.
주말에 다시 한번 복습해야 할 듯!
각각의 강의에서 숙지해야 할 내용들을 정리했다.
https://velog.io/@amberjack/Unity-숙련-주차-Survival-게임-플레이어-만들기
https://velog.io/@amberjack/Unity-숙련-주차-Survival-게임-플레이어-상태-및-UI
https://velog.io/@amberjack/Unity-숙련-주차-Survival-게임-데미지-처리하기
오늘은 왜인지 모르겠지만 무진장 졸려서 집중을 제대로 하지 못했다. 쌩쌩해질 때 쯤 식사 시간이 되고, 식사하고 오니 식곤증 때문에 졸리고의 연속이었다... 요새 잠을 제대로 못자서 그런듯하다. 오늘은 일찍 자서 내일 강의 열심히 들어야 겠다.