자료구조 & 알고리즘/알고리즘

[JAVA] 사전 / 사후 판단 반복(양수만 입력받기, 정수 자릿수 구하기)

ReBugs 2023. 1. 18.

Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다.


사전 판단 반복과 사후 판단 반복의 차이점

사전 판단 반복문인 while문과 for문은 처음에 제어식을 평가한 결과가 0이면 루프 본문은 한 번도 실행되지 않는다. 이와 달리 사후 판단 반복문인 do-while문은 루프 본문이 반드시 한 번은 실행된다. 이것이 사전 판단 반복과 사후 판단 반복의 차이점이다.

 

음수 입력 방지하기

import java.util.Scanner;
public class Test{
	static int SumFor(int n)
	{
		int sum = 0;
		for(int i = 1; i <= n; ++i)sum += i;
		return sum;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;
		
		do { //음수 입력 방지
			System.out.print("양의 정수를 입력하세요 : ");
			n = sc.nextInt();
		}while(n<=0);
		
		System.out.println("1부터 "+ n +"까지 합계 : " + SumFor(n));
	}
}
/*
양의 정수를 입력하세요 : -5
양의 정수를 입력하세요 : 0
양의 정수를 입력하세요 : 100
1부터 100까지 합계 : 5050
*/

 

설명
do 블록은 처음에 무조건 실행되므로 정수를 출력 받고 while문의 제어식이 참(true)이면 do 블록을 다시 실행하게 된다.
즉, 음수를 입력하면 do 블록을 계속 실행하게 된다.

 

변수 a, b 입력받고 b - a를 출력하기

두 변수 a, b에 정수를 입력하고 b - a를 출력하는 프로그램 작성

(단, 변수 b에 입력한 값이 a이하면 변수 b의 값을 다시 입력하도록 유도)

package TestPackage;
import java.util.Scanner;
public class Test{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("정수 두 개를 입력하세요 : ");
		int a = sc.nextInt();
		int b;
		b = sc.nextInt();
		do {
			if(a<b)break;
			System.out.print("앞에 입력된 값보다 큰 값을 입력하세요 : ");
			b = sc.nextInt();
		}while(a>=b);
		
		System.out.println(b-a);
	}
}
/*
정수 두 개를 입력하세요 : 6 6
앞에 입력된 값보다 큰 값을 입력하세요 : 4
앞에 입력된 값보다 큰 값을 입력하세요 : 1
앞에 입력된 값보다 큰 값을 입력하세요 : 8
2
*/

 

설명
a와 b를 입력받고 a보다 b가 더 크면 루프를 탈출하고, a가 b보다 크거나 같으면 루프를 다시 돌게 된다.

 

입력받은 양의 정수의 자릿수 구하기

양의 정수를 입력하고 자릿수를 출력하는 프로그램을 작성하기

예를 들어 134를 입력하면 3을 출력하고, 1314를 입력하면 4를 출력하기

import java.util.Scanner;
public class Test{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;
		do {
			System.out.print("양의 정수를 입력하세요:");
			n = sc.nextInt();
		} while (n <= 0);

		int nc = 0;
		while (n > 0) {
			n /= 10;
			nc++;
		}

		System.out.println(nc);
	}
}
/*
양의 정수를 입력하세요:-66
양의 정수를 입력하세요:0
양의 정수를 입력하세요:68818473
8
*/

 

설명
사용자로부터 정수를 입력받아 n에 저장을 하고, n을 10으로 음수나 0이 될 때까지 나눈다. 10으로 나눌 때마다 자릿수를 저장하는 nc는 1씩 증가하게 된다. 결국 n이 음수 또는 0이 되면 루프를 탈출하고 nc를 출력한다.

댓글