본문 바로가기
study/JAVA

[자바 JAVA] 주어진 수까지의 소수 구하기(break 활용하기)

by stilinski 2022. 3. 29.
728x90

 

원하는 결과:

 

 

실수는 1과 자신 외에 나눠지는 값이 없는 1보다는 큰 자연수.

즉 자신 이외의 숫자로 나눴을 때 나눠지면 실수가 아닌 것.

그것에 입각해서 코드를 구현한다.

 

 

 

답:

public class Prob006_method {

	public static void main(String[] args) {
		System.out.println("<< 15 까지의 소수 >>");
		primeNumber(15);
		System.out.println("<< 32 까지의 소수 >>");
		primeNumber(32);
	}

	private static void primeNumber(int num) {
		// 구현하세요.

		for (int i = 2; i <= num; i++) {
			for (int j = 2; j <= i; j++) {
				if ((i % j) == 0) {
					if (j == i) {
						System.out.print(i + ", ");
					} else {
						break; // 반복문에서 빠져나옴
					}
				}
			}
		}
		System.out.println();

	}
}

 

 

풀이

  1. 일단 1을 제외한 2부터 주어진 수 i를 뽑는 반복문을 만든다.
  2. 반복문이 돌면서 값을 하나씩 뽑아내면 값마다 2부터 자기 자신인 j를 하나씩 나눠보는 식을 구현한다.
  3. 자기 자신의 크기보다 작은 숫자들로 나눠지면 실수가 아니다. 일단 그 숫자들을 걸러내기 위해 if문으로 i 나누기 j를 했을 때 값이 떨어지는 수들을 걸러낸다.
  4. 나눠 떨어지는 숫자들 중에 서로가 같다면 실수가 맞으니 출력해줌. 그러나 나누어 떨어졌는데 서로가 같지 않다면 그 수는 실수가 아니기 때문에 더 볼 필요가 없으므로 break를 이용해서 반복문을 빠져나옴.

말로 설명하니까 더 어려워보여..ㅋㅋㅋㅋㅋ

예를 들자면 음 i가 4일 때 j는 i보다 같거나 작다고 지정되어있기 때문에 2,3,4까지 출력할 수 있음. 그러나 j가 4까지 간다면 i와 j는 나누어 떨어지고 또 서로 같은 수 이기 때문에 if문에서 출력해버림. 그러면 우리가 원하는 출력 값을 얻을 수 없음. 그러므로 4가 2에서 나눠졌을 때 그 이상 반복문을 돌리면 안 됨. 즉 j가 4까지 가게 해서는 안됨. 그래서 4가 2로 나눠졌을 때 if문으로 잡아서 break를 이용해서 내보내야 함. j 반복문을 종료시켜야 함.

그러면 i반복문이 실행이 될 거임. i는 5가 됨. 5는 실수라서 자기보다 작은 숫자로 나눠지지 않음. 그래서 j가 5가 될 때까지 반복문이 돌아감. 그리고 출력이 됨.

 

 

 


break를 모른다면 이해가 안 되는 코드임.

break를 알긴 알지만 제대로 감을 잡지 못한 상태였음.

그러니 break를 쓸 생각 전혀 못했음.

이 문제를 만나서 break에 대해 좀 더 알아갈 수 있는 기회가 되었음.

 

하하하

그렇게 헤매었는데.. 답보니 허탈하네

break를 이럴 때 쓰는구나...

이것도 매일 해본다 실시

 

 

 

 

 

+0404

이 코드를 구현하는 방법이 2가지 더 있다.

기존꺼보다는 덜 효율적일지도 모르지만..?

 

 

1.

 

2.

2번이 더 효율적인 방법

1번은 break를 else안에 넣어서 일단 i==j이면 실수가 맞아서 더이상 확인 안해도 되는데 반복문이 필요이상으로 계속 돌아가게됨. 

2는 break를 작은 if에서 빼서 일단 i==j가 같다면 그 값을 출력하고 바로 빠져나올 수 있게끔 함. 

i가 자신보다 작은 값으로 나눠진다면 그건 실수가 아님. 그래서 그럴때도 더이상 반복문 안 돌리고 빠져나오도록 일단 나눠지면 안쪽 if로 걸러내고 i==j에 해당안되니가 break로 바이바이

 

 

 

 

 

 

 

 

 

 

728x90

'study > JAVA' 카테고리의 다른 글

Java 반복되는 코드를 줄이자 리펙토링!  (0) 2022.03.31
JAVA 종류별 값의 합 구하기(값 누적)  (0) 2022.03.31
Java 기초 배열 Array  (0) 2022.03.29
Java 기초 제어문  (0) 2022.03.29
반복문 숙제 체크  (0) 2022.03.29

댓글