Deeb
디비의 DB
Deeb
전체 방문자
오늘
어제
  • 분류 전체보기 (243)
    • Frontend (63)
      • HTML & CSS (27)
      • JavaScript (17)
      • jQuery (8)
      • React (6)
    • Backend (98)
      • Java (19)
      • JDBC (2)
      • Servlet & JSP (13)
      • Spring (17)
      • Project (0)
      • 개발 공부 (11)
      • 문제 풀이 (8)
      • Algorithm (1)
      • DataBase (0)
      • Oracle (18)
      • Error (8)
    • Knou (1)
    • Review (14)
    • TIL (33)
    • 삽질기록 (8)
    • deebtionary (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 방통대
  • 정의
  • css
  • DBMS
  • 기초
  • 에러
  • 서평단
  • 배열
  • 후기
  • 한빛미디어
  • 다형성
  • 방송대
  • 공부
  • 정처기
  • DB
  • 2학기
  • alter
  • js
  • Java
  • 자바
  • 함수
  • 클래스
  • 책
  • HTML
  • 리액트
  • 삭제
  • GIT
  • 추천
  • For
  • CLASS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Deeb

디비의 DB

Backend/문제 풀이

[Java] 소수 판별 문제_for, if, flag

2021. 8. 31. 15:03

📝소수 판별

조건

👉 사용자로부터 입력 받은 정수가 소수인지 판별하는 프로그램 
👉 소수: 1과 자기 자신으로 나눴을때 0 이 나오는 수 
👉 단, 입력받은 수가 2보다 작을 경우 " 잘못 입력하셨습니다." 출력

출력 화면)
입력 : 5 
소수입니다.  

 

입력 : 1

잘못 입력하셨습니다.


⭕ 풀이 코드 

Scanner sc = new Scanner(System.in);
		
	System.out.print("입력 : ");
	int input = sc.nextInt();

	if(input < 2) {
		System.out.println("잘못 입력하셨습니다.");
	} else {
			
		boolean flag = true; //소수 판별용 변수
			
		for(int i = 2; i < input; i++ ) { //모든 수는 1은 나눠지니깐 2 ; 자기자신도 포함하면 x;
			// 반복문에서 i가 하는 역할: 입력된 값을 나누는 역할
			// -> i로 나눴을 때 나머지가 0이 나옴
			// == 1과 자기 자신을 제외한 수로 나눌 수 있다 == 소수가 아니다
				
			if(input % i == 0) { // 나누어 떨어짐  == 소수가 아니다
				flag = false; //소수가 아니라고 저장
				break;
				// 한 번이라도 나누어 떨어진 경우
				// 소수가 아닌 것을 알 수 있으므로
				// 남은 수로 나누는 수고를 할 필요 없이 반복을 종료
                                   
			}//if
				
		}//for
		// for문이 끝났지만 한번도 if문이 수행 되지 않았다 == 소수 
			
		// for문이 끝나고 나서
		if(flag) { //flag가 true라면 == 소수인 경우
			System.out.println("소수 입니다.");
				
		} else { // flag가 false라면 == 소수가 아닌 경우
				System.out.println("소수가 아닙니다.");
		}
		
	}//if 바깥

 

🔎 think 

  • 소수 : 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수
  • 소수 판별 하는 법 : 자기보다 작은수를 반복하고 그 수와 나누기했을 때 나머지 0 

➡ For 반복문으로 자기보다 작은 수들을 반복하고

➡ if문으로 입력된 값과 i(2~입력된 값 -1 의 수들) 나눠보기 


추가 조건

👉 잘못 입력한 경우 프로그램을 종료하는 것이 아닌 다시 입력을 받을 수 있게 구현하기

 

출력 화면)

정상으로 입력 할 경우 프로그램이 종료

맞는 답안이 나올 때까지 계속 입력 받는다.

 

Scanner sc = new Scanner(System.in);
		
    while(true) { //정답이 나올 때 까지 멈추면 안되니깐 while
			
		System.out.print("입력 : ");
		int input = sc.nextInt();
			
		if(input < 2) {
			System.out.println("잘못 입력하셨습니다.");
		} else {
				
			boolean flag = true;
				
			for(int i =2; i<input; i++) {
					
				if (input % i == 0) { //소수가 아니라면
					flag = false;
					break;
				}//if
			}//for
				
		if(flag) {
			System.out.println("소수 입니다.");
		} else {
			System.out.println("소수가 아닙니다.");
		}
		//내부에서 실행된 후 바깥쪽 while문을 멈춰야한다. 
		break;
	}
}

 

🔎 think 

한 번이라도 나누어 떨어진 경우 소수가 아닌 것을 알 수 있으므로

남은 수로 나누는 수고를 할 필요 없이 반복을 종료한다. => break;

 

➡ 앞서 작성한 코드에  정답이 나올 때까지 반복되게  while문 추가

➡ 소수가 맞다는 결과를 출력하고 break; => 가장 가까이 있는 반복문을 멈추게 하기때문에 while문이 종료된다. 

 

break;

수가 커질 경우 앞에서 한번만 나뉘어져도 == 0이된다면 break;를 추가해준다.

=> break;는 가장 가까운 반복문에 영향을 주기 때문에 2부터 input까지 반복하는 반복문에 영향을 준다.

 

package edu.kh.control.branch.ex.service;

public void example8_teach

반응형

'Backend > 문제 풀이' 카테고리의 다른 글

[Java] Polymorphism(다형성)_예제  (0) 2021.09.11
[Java] Inheritance(상속) 예제  (0) 2021.09.08
[Java|연습] 2차원 Array(배열)_기초 문제 행,열 합  (0) 2021.09.02
[Java|연습] Array(배열)_lotto(Math.random())  (0) 2021.09.02
[Java|연습] Array(배열)_초기화  (0) 2021.09.02
    'Backend/문제 풀이' 카테고리의 다른 글
    • [Java] Inheritance(상속) 예제
    • [Java|연습] 2차원 Array(배열)_기초 문제 행,열 합
    • [Java|연습] Array(배열)_lotto(Math.random())
    • [Java|연습] Array(배열)_초기화
    Deeb
    Deeb

    티스토리툴바