Java

[Java] 중첩 반복문

Dongi 2022. 8. 14. 17:08

 

 

 

 

 

 

안녕하세요! 오늘은 중첩 반복문을 연습해보겠습니다.

 

 

중첩 반복문(Nested Loop Statement)

두 개 이상으로 이루어진 반복문을 중첩 반복문이라고 합니다. (두 개 2D, 세 개 3D, ... 이런 식으로 부르기도 합니다.)

 

 

 

1. 정수를 입력받아 기호를 이용하여 정수의 크기 만한 정사각형 출력하기

import java.util.Scanner;

public class NestedLoopA01 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 입력
		System.out.println("직사각형을 출력합니다.");
		System.out.print("정수 입력: ");
		int n = sc.nextInt();
		
		// 정사각형 출력
		for(int i=0; i<n; i++) { // i=1이라면 i<=도 가능
			for(int j=0; j<n; j++) { // j=1이라면 j<=도 가능
				System.out.print("★");  // 기호
			}
			System.out.print("\n"); // 줄 바꿈
		}
			
		
		// 스캐너 닫기	
		sc.close();
	}
}
/* 
정수 입력: 6
★★★★★★
★★★★★★
★★★★★★
★★★★★★
★★★★★★
★★★★★★
*/

줄 간격 때문에 정확히 정사각형이 나오진 않네요.

 

 

2. 두 개의 정수를 입력받아 직사각형 만들기

import java.util.Scanner;

public class NestedLoopA02 {
	public static void main(String[] args) {
		
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 두 개 입력 받기
		System.out.println("직사각형을 출력합니다.");
		System.out.print("세로: ");
		int y = sc.nextInt();
		System.out.print("가로: ");
		int x = sc.nextInt();
		
		// 직사각형 만들기 - 첫번 째 반복문 = 세로 y, 두번 째 반복문 = 가로 x
		for(int i=0; i<y; i++) { // 세로
			for(int j=0; j<x; j++) { // 가로
				System.out.print("*"); // 기호
			}
			System.out.println(); // 줄 바꿈
		}
		
		// 스캐너 닫기
		sc.close();
	}
}
/*
직사각형을 출력합니다.
세로: 5
가로: 3
***
***
***
***
***
*/

 

 

 

3.  길이를 정수로 입력 받아 왼쪽 아래가 직각인 삼각형 만들기

import java.util.Scanner;

public class NestedLoopA03 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 가로 길이 정수 입력
		System.out.println("왼쪽 아래가 직각인 삼각형을 만듭니다.");
		System.out.print("가로 길이 입력: ");
		int n = sc.nextInt();
		
		// 직각 삼각형 그리기
		for(int i=1; i<=n; i++) {   // 세로 길이
			for(int j=1; j<=i; j++) { // 가로 길이
				System.out.print("*"); // 기호
			}
			System.out.println(); // 줄 바꿈
		}
		
		// 스캐너 닫기
		sc.close();
	}
}

/*
왼쪽 아래가 직각인 삼각형을 만듭니다.
가로 길이 입력: 5
*
**
***
****
*****
*/

 

 

 

4. 길이를 정수로 입력 받아 왼쪽 위가 직각인 삼각형 만들기

import java.util.Scanner;

public class NestedLoopA04 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 입력 받기
		System.out.println("왼쪽 위가 직각인 삼각형을 출력합니다.");
		System.out.print("정수 입력: ");
		int n = sc.nextInt();
		
		// 왼쪽 위가 직각인 삼각형
		for(int i=1; i<=n; i++) { // 세로 길이
			for(int j=1; j<n-i+2; j++) { // 가로 길이 n은 정해져 있고 i는 숫자가 계속 커지니까 *을 점점 줄여가며 출력가능
//			for(int j=n; j>=i; j--) <- 이것도 가능
//			for(int j=i; j<=n; j++) <- 역시 가능
				System.out.print("*"); // 기호
			}
			System.out.println(); // 줄 바꿈
		}
		
		// 스캐너 닫기
		sc.close();
	}
}
/*
왼쪽 위가 직각인 삼각형을 출력합니다.
정수 입력: 5
*****
****
***
**
*
*/

 

 

 

5. 길이를 정수로 입력 받아 오른쪽 아래가 직각인 삼각형 만들기

import java.util.Scanner;

public class NestedLoopA05 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 입력 받기
		System.out.println("오른쪽 아래가 직각인 삼각형을 출력합니다.");
		System.out.print("정수 입력: ");
		int n = sc.nextInt();
		
		// 오른쪽 아래가 직각인 삼각형 만들기
		for(int i=1; i<=n; i++) { // 세로 길이
			for(int j=1; j<=n-i; j++) { // 빈칸의 가로 길이
//			for(int j=n-1; j>=i; j--)	<- 얘도 가능
				System.out.print(" ");
			}
			for(int j=1; j<=i; j++) { // 기호의 가로 길이
				System.out.print("*");
			}
			System.out.println(); // 줄바꿈
		}
		
		// 스캐너 닫기
		sc.close();
	}
}
/*
오른쪽 아래가 직각인 삼각형을 출력합니다.
정수 입력: 5
    *
   **
  ***
 ****
*****
*/

 

 

 

6. 길이를 정수로 입력 받아 오른쪽 위가 직각인 삼각형 만들기

import java.util.Scanner;

public class NestedLoopA06 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 입력 받기
		System.out.println("오른쪽 위가 직각인 삼각형을 출력합니다.");
		System.out.print("정수 입력: ");
		int n = sc.nextInt();
		
		// 오른쪽 위가 직각인 삼각형 만들기 - 왼쪽 위가 직각인 삼각형에 빈칸만 넣으면 된다.
		for(int i=1; i<=n; i++) { // 세로 길이
			for(int j=1; j<i; j++) { // 빈칸 가로 길이
				System.out.print(" ");
			}
			for(int j=1; j<n-i+2; j++) { // 기호 가로 길이
//			for(int j=n; j>=i; j--) <- 얘도 가능
				System.out.print("*");
			}
			System.out.println(); // 줄 바꿈
		}
		
		// 스캐너 닫기
		sc.close();
	}
}
/*
오른쪽 위가 직각인 삼각형을 출력합니다.
정수 입력: 5
*****
 ****
  ***
   **
    *
*/

 

 

 

7.  정수 하나를 입력 받아 그 정수의 소수를 모두 출력하고 개수와 합계를 구하시오.

import java.util.Scanner;

public class NestedLoopA07 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 입력
		System.out.println("입력한 정수까지 범위 안에 있는 소수를 찾습니다.");
		System.out.print("정수 입력: ");
		int n = sc.nextInt();
		
		// 소수의 개수와 합계
		int count = 0, sum = 0;
		
		// 소수 찾기 - 1은 소수가 아니기 때문에 2부터 시작
		for(int i=2; i<=n; i++) {
			for(int j=2; j<=i; j++) {
				if(i==j) {
					System.out.print(i + " ");
					++count; // 자신의 값을 1 증가 시키고 난 후 대입
					sum += i;
				}
				if(i%j==0) {
					break;
				}
			}
		}
		
		// 출력문
		System.out.printf("\n소수의 개수: %2d\n소수의 합계: %2d", count, sum);
		
		// 스캐너 닫기
		sc.close();
	}
}

/*
입력한 정수까지 범위 안에 있는 소수를 찾습니다.
정수 입력: 50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 
소수의 개수: 15
소수의 합계: 328
*/

 

 

 

8. 정수 하나를 입력 받아 그 정수의 범위 내에 있는 모든 완전수를 출력하고 완전수의 개수와 합계를 구하시오.

import java.util.Scanner;

public class NestedLoopA08 {
	public static void main(String[] args) {
		// 스캐너 인스턴스 - 객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 정수 입력 받기
		System.out.println("완전수를 구합니다.");
		System.out.print("정수 입력: ");
		int n = sc.nextInt();
		
		// 완전수의 개수와 합계
		int count = 0, sum = 0;
		
		// 완전수 구하기
		for(int i=2; i<=n; i++) { // <- 완전수 후보
			int s = 0;
			for(int j=1; j<=i/2; j++) { // <- 약수 구하기
				if(i%j == 0) {
					s += j; // 약수의 합
				}
			}
			if(i==s) {
				System.out.print(i + " ");
				++count; // <- 완전수의 개수 (전위  증가 연산자: 자신의 값을 1 증가 시키고 난 후 대입)
				sum += i; // <- 완전수의 합 
			}
		}
		System.out.println();
		System.out.printf("%d까지의 완전수는 %d개있고 그의 합은 %d입니다.", n, count, sum);
		
		// 스캐너 닫기
		sc.close();
	}
}
/*
완전수를 구합니다.
정수 입력: 10000
6 28 496 8128 
10000까지의 완전수는 4개있고 그의 합은 8658입니다.
*/

 

 

 


 

 

 

본 내용은 강남 이젠아카데미컴퓨터학원에서 배운 내용을 복습하는 과정입니다.
링크 : https://gn.ezenac.co.kr/
 

강남 이젠아카데미컴퓨터학원

강남역, 컴퓨터학원, 웹디자인학원, 편집디자인학원, 카티아학원, 캐드학원, 전산회계학원, 전산세무학원, 직장인, 실업자, 국비지원, 무료교육, 취업성공패키지, 내일배움카드, 강남컴퓨터학원

gn.ezenac.co.kr