ballqs 님의 블로그
TIL - 2024년 07월 16일 공부한 내용 정리하기(소수 로직, 약수 로직, Integer 비교) 본문
1.오늘 배운 것
오늘 코딩 문제를 풀다가 막힌 부분이 생겨서 공부를 하다가 알게된 내용이 있다.
소수 판별하기 와 약수 구하기에 대한 방법론을 알게 되었고 Integer를 == 로 비교하는 것과 equals로 비교하는 것의 차이에 대해서 배우게 되었다.
2.개념 정리
소수 판별하기
소수란?
1과 자기 자신 만을 약수로 가지는 수 라고 한다. 이를 판별하기 위한 코드가 아래와 같다.
for(int i = 0; i < 숫자; i++){
if(숫자 % i == 0){
// 나누어지는 숫자가 있을때 소수가 아님을 뜻함
break;
}
}
위의 방법을 통해 나누어지지 않는다면 소수로 판단해서 알고리즘을 풀어나가면 된다.
약수 구하기
약수란?
어떤 수를 나머지 없이 나눌 수 있는 자연수이다. 이를 판별하기 위한 코드가 아래와 같다.
for(int i=1; i < 숫자; i++){
if(숫자 % i == 0){
// 약수
}
}
일반적인 방법이라면 위와 같이 사용하며 소수 판별하기와 다를것 없이 보이는데 숫자가 높을 수록 런타임 에러가 뜰 가능성이 높아진다. 이를 해결 하기 위해 최적의 방법론이 뭔지 찾아보기로 했다.
최적의 방법
for(int i=1; i * i < number; i++){
if(i * i == number){
// i 자체가 약수
}else if(number % i == 0){
// i 와 number / i 했을때 나오는 숫자가 약수
}
}
숫자가 높아도 위와 같은 방법으로 동작하게 되면 예를 들어 20의 약수가 2라는것이 알게 되었을때 20를 2로 나누면 또 다른 약수는 10이라는 사실을 알수 있다.
소수 판별하기와 약수 구하기의 방법론을 기반으로 코딩 문제를 풀었다.
Integer Type에 대해
Integer에는 -128 ~ 127까지는 IntegerCache를 통해 같은 주소를 참조하게 만들어서 == 동등연산자를 통해 비교해도 true라는 결과값을 가져온다. 하지만 128 이상인 경우 IntegerCache의 영향을 받지 않아 같은 숫자를 가져도 == 동등연산자로 비교하면 다르다고 나온다. 이럴때 equals 메서드를 사용해서 비교해야 한다.
Integer num1 = 10;
Integer num2 = 10;
System.out.println(num1==num2); //true
System.out.println(num1.equals(num2)); //true
// 128이상이므로 == 동등연산자로 비교하면 false로 나옴
Integer num1 = 128;
Integer num2 = 128;
System.out.println(num1==num2); //false
System.out.println(num1.equals(num2)); //true
// 단 아래와 같이 호출해도 다르다고 나온다. 래퍼 클래스는 동등연산자로 비교 불가인듯하다
Integer num1 = 100;
Integer num2 = new Integer(100);
System.out.println(num1==num2); //false
System.out.println(num1.equals(num2)); //true
Integer Type에 대한 지식으로 풀게 된 문제가 있다.
3.해당 개념이 중요한 이유
단순 노가다 작업만 하다보면 보는 시야가 좁아진다.
이래저래 많은 것들을 배우고 기록해놓아야 키워드만으로 다시 블로그에 작성한 내용을 찾게 되고 이중으로 일하지 않게 된다. 이렇게 모르는 것들이 생기면 항상 기록하는 습관을 들이자!
'내일배움캠프 > Java' 카테고리의 다른 글
TIL - 2024년 08월 01일 - 팀 프로젝트 시작 (0) | 2024.08.01 |
---|---|
TIL - 2024년 07월 19일 공부한 내용 정리하기(int long BigInteger) (0) | 2024.07.19 |
TIL - 2024년 07월 18일 공부한 내용 정리하기(Set) (0) | 2024.07.18 |
TIL - 2024년 07월 17일 공부한 내용 정리하기(for문 수행순서 , toCharArray , StringBuilder) (0) | 2024.07.17 |
[프로그래머스 코딩문제] 2016년 - JAVA (0) | 2024.07.15 |