23.06.12 ~ 06.17 WIL

정길규·2023년 6월 18일

한 주간 학습 내용

  1. 객체지향 프로그래밍에서의 클래스와 인스턴스의 차이
  2. Java언어 (클래스, 생성자, 상속, 인터페이스, 추상클래스)
  3. Java언어로 알고리즘 문제 풀이

클래스와 인스턴스의 차이

https://velog.io/@gilgyu4125/23.06.15-TIL

Java 언어 학습

알고리즘 문제 풀이

콜라츠 추측

https://school.programmers.co.kr/learn/courses/30/lessons/12943
이 문제를 풀때 3번째 입력 값에서 계속 예상된 값이 아닌 수가 출력이 되었다. 계속 코드를 확인해도 이상이 없다고 생각이 들었는데 찾아보니 데이터 값 입력 후 코드 연산상에서 오버플로우가 발생하여 데이터가 손실된다는 것을 알게 되었다.

class Solution {
		// 입력 num 값을 int -> long로 수정
        public int solution(long num) {
        int count = 0;
        // 입력 값이 1이면 0값 return
        if (num == 1) {
            return 0;
        }
        
        // 반복문을 통한 입력 값이 1 일 될때 까지 반복
        while (num != 1) {
            if (num % 2 == 0) {
                num = num / 2;
                count++;
            } else {
                num = (num * 3) + 1;
                count++;
            }
        }
        
        // 반복수가 500번 이상 이면 -1 return
        if (count >= 500) {
            return -1;
        } else {
            return count;
        }
    }
}

문제에서 입력값 타입을 int에서 long으로 수정후 오버플로우 문제 해결

데이터 오버 플로우

컴퓨터의 데이터는 0과 1로 나뉘어져 있으며, 이 크기는 1bit 이다. 자료형 마다 크기가 정해져 있다. 이러한 크기가 넘은 값이 입력되면 자료값이 손실되는 것을 오버플로우라고 한다.

0개의 댓글