JAVA

[JAVA] 반복문 (for, while, do - while, 백준 2439 별 찍기 - 2)

김디니 2023. 3. 6. 09:02

반복문

반복문은 초기화 → 조건식 → 실행 블록 → 증감식 순서로 진행된다.

 

  • 초기화
    • 사용할 조건값을 초기화한다.
  • 조건식
    • 초기화한 값이 주어진 조건에 맞는지 확인하며 true/false 값을 반환한다.

 

for문은 반복해야 하는 횟수가 지정될 때 주로 사용한다.

 

while문은 반복 횟수 보다는 상황에 의한 반복을 정의할 때 사용한다.

 

do - while문은 while 작업 중 최소 한 번은 실행해야 할 작업이 있는 경우 유리하다.

 

 

for 문

for문을 사용해서 구구단을 출력해보자.

 

package day01;

import java.util.Scanner;

public class Gugu {
	public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);	// 입력값 받기
             int dan = scanner.nextln();
            
             for(int i = 1; i <= 9; i++){
            	System.outprint(dan + "*" + i + "=" + (dan*i) + "\t");
             }
        }
}

 

출력할 단을 입력받기 위해 Scanner를 생성하고, nextln()를 통해 입력받은 값을 dan에 할당한다.

 

for문을 통해 구구단을 출력한다.

i를 1로 초기화한 후 9까지 dan의 값과 곱해주는 것이다. 

 

// 출력값

9	// 입력값
9*1=9	9*2=18 ... 9*9=81

 

 

백준 2439 별 찍기 - 2

이중 for문을 사용해보자.

 

input = 5

output =
      *
    **
   ***
 ****
*****

 

전체코드

import java.util.Scanner;

public class Main
{
	public static void main(String[] args) {
	    Scanner sc = new Scanner(System.in);
	    int n = sc.nextInt();
	    sc.close();

	    for(int i=1; i <= n; i++){
	        for(int j=1; j <= n - i; j++){  // 공백과 별의 개수를 n과 맞추기
	            System.out.print(" ");
	        }
	        for(int k=0; k < i; k++){
	            System.out.print("*");
	        }
	        System.out.println();
	    } 
	}
}

 

로직

오른쪽 정렬로 별을 출력하기 위해서는 왼쪽으로 정렬된 공백이 필요하다.

별과 공백을 같이 출력하기 위해서는 두개의 for문이 필요하다.

 

 

코드 디테일

 

입력값 받기

	    Scanner sc = new Scanner(System.in);
	    int n = sc.nextInt();
	    sc.close();

Scanner 클래스를 생성한 후 정수 n을 입력 받는다.

sc.close() 메소드를 사용하여 입력값을 받는 Scanner를 해제한다.

 

 

이중 for문으로 별 찍기

	for(int i=1; i <= n; i++){
	        for(int j=1; j <= n - i; j++){  // 공백과 별의 개수를 n과 맞추기
	            System.out.print(" ");
	        }
	        for(int k=0; k < i; k++){
	            System.out.print("*");
	        }
	        System.out.println();
	    }

 

첫 번째로 시작하는 for문은 i가 1부터 n까지 증가(i++)하면서 반복하도록 설정한다.

 

두 번째로 시작하는 for문은 j가 1부터 n - i까지 증가하면서 반복한다. 이는 별이 아닌 공백을 채우기 위한 for문이다.

만약에 n이 5일 때 맨 오른쪽에 별 하나가 출력되고 나머지 왼쪽에 정렬된 4개의 공백이 필요하다. (    *)

이를 위해 열의 개수를 나타내는 n에 현재 별을 찍기 위해 증가되는 i의 값을 빼주면 된다.

 

세 번째로 시작하는 for문은 k가 0부터 i - 1까지 증가하면서, i개의 별을 출력한다. 

위에서 공백 4개를 출력할 때 i는 하나를 출력하는 것이다. 

 

 

 

 

while 문

 

while문은 for문과 달리 구성요소를 위한 영역이 표시되지 않으므로 주의해야 한다.

 

기본 구조

초기화
while(조건식) {
	// 조건식이 true일 경우 실행할 문장
    증감식;
}

 

이중 while문으로 구구단을 출력해보자.

 

package day01;

import java.util.Scanner;

public class Gugu {
	public static void main(String[] args) {
             int i = 1;								// 	초기값
             while(i <= 9) {						//  조건식
             	System.out.print(i + "단: ")
             	int j = 1; 							//  초기값2
                while(j <= 9){
                    System.out.print(i + "*" + j + "=" + (i*j) + "\t"); // 실행문
                    j++;							// 증감식2
                }
                i++; 								// 증감식 
             }
             System.out.println();					// 개행
         }

}

 

// 출력값

1*1=1 1*2=2 1*3=3 ...
2*1=2 2*2=4 2*3=6 ... 
...

 

첫 번째 while문에서 단을 결정할 변수 i를 1로 초기화한다.

조건식이 i <= 9 이므로 1 ~ 9까지 반복한다.

 

두 번째 while문에서 곱해질 변수를 j로 선언하고 1로 초기화한다.

조건식이 j <= 9 이므로 1 ~ 9까지 반복한다.

 

반복되고 있는 i와 j의 곱을 이용하여 구구단을 출력한다.

 

출력 후 내부 반복문에서 사용되는 j를 증가시킨다. (j++)

이후에 외부 반복문에서 사용되는 i를 증가시킨다. (i++)

 

 

 

 

do - while 문

do - while문은 while과 문법이 비슷하다.

while문과 차이점은 일단 한 번 실행(do)하고 나서 반복(while)을 결정한다.

 

 

기본 구조

초기화
do{
  // 조건식이 true일 경우 실행할 문장
  증감식;
} while(조건식)

 

초기화 후 실행문과 증감식이 있는 블록을 먼저 수행하고나서 조건식을 확인한다.

즉, 조건에 관한 확인은 실행 블록을 한 번 수행한 후이다.

 

 

제곱근을 구하는 do - while문을 작성해보자.

 

package day01;

import java.util.Scanner;

public class DoWhile{
	public static void main(String[] args){
    	Scanner scanner = new Scanner(System.in);
        int i = 0;
        
        do{
            System.out.println("숫자를 입력하세요.");
            i = scanner.nextln();
            System.out.println(i + "의 제곱근은 : " + Math.sqrt(i));
        } while(i > 0);
    }
}

 

 

// 출력값

숫자를 입력하세요.
4
4의 제곱근은 : 2.0

 

int 타입의 초기화 변수 i를 0으로 초기화한다.

 

do를 이용해 반복문을 작성한다. 

조건이 나오기 전에 블록 내용을 한 번 실행한다. 

Math.sqrt(); 함수를 사용하여 제곱근을 반환한다.

 

do 블록을 실행한 후 조건식을 확인한다.

만약 i의 값이 0보다 크면 다시 do 블록을 실행하고, 그렇지 않다면 반복문을 종료한다.

즉, 0을 입력하면 프로그램이 종료된다.

'JAVA' 카테고리의 다른 글

[JAVA] 생성자 Constructor  (0) 2023.03.09
[JAVA] Overloading (+ 객체 생성 개념, static)  (0) 2023.03.09
[JAVA] Method  (2) 2023.03.08
[JAVA] 조건문 (if - else, switch - case)  (0) 2023.03.06
[JAVA] 문법 (변수, 데이터 타입)  (0) 2023.03.06