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/