본문 바로가기

All Categories/BE & Java

개발일지 #6 - Java 반복문 - for, while

반응형

for문

for ([반복변수]; [반복조건]; [반복변수증감식]) {
    반복하여 실행할 문장
}

// 1부터 10까지 츨력
for (int i = 1; i < 11; i++) {
    System.out.println(i);
}

문제 1: 구구단

💡 2단부터 9단까지 출력하라.
출력 예:
2단
2x1=2 2x2=4 ... 2x9=18 ...
9단
9x1=9 9x2=18 ... 9x9=81

코드

for (int i = 2; i < 10; i++) {
    System.out.println(i + "단");
    for (int j = 1; j < 10; j++) {
        System.out.print(i + "x" + j + "=" + i * j + " ");
    }
    System.out.println();
}

실행 결과

문제 2: 방정식

💡 4x + 5y = 60 을 만족하는 x, y 값을 출력하라. (단, x, y는 1이상 10이하인 정수)

코드

for (int x = 1; x <= 10; x++) {
    for (int y = 1; y <= 10; y++) {
        if ((4 * x) + (5 * y) == 60) {
            System.out.println("x: " + x + "  y: " + y);
        }
    }
}

1 이상 10 이하인 정수 x, y 값을 모두 대입하여 방정식을 만족하는 값을 찾도록 구현하였습니다.

실행 결과

x: 5, y: 8
x: 10, y: 4

문제 3

💡 정수를 하나 입력 받고 1부터 입력 받은 정수까지의 정수 중에서 2의 배수, 3의 배수를 제외한 수의 총합 출력

코드

Scanner scanner = new Scanner(System.in);
int num = 0, sum = 0;
System.out.print("숫자 입력: ");
num = scanner.nextInt();
for (int i = 1; i <= num; i++) {
    if ((i % 2 != 0) && (i % 3 != 0)) {
        System.out.println("i = " + i);
        sum += i;
    }
}
System.out.println("sum = " + sum);

2의 배수, 3의 배수를 판별하기 위해 % 연산자를 활용하였습니다.

실행 결과

문제 4: 별 찍기

💡 출력 예)
*
**
***
****
*****
*****
****
***
**
*

코드

for (int i = 1; i <= 5; i++) { // 줄수, 별을 출력할 횟수
    for (int j = 1; j <= i; j++) { // 별을 줄수만큼 출력
        System.out.print("*");
    }
    System.out.println(); // 줄을 바꾸기 위한 용도
}
for (int i = 1; i <= 5; i++) { 
    for (int j = 5; j >= i; j--) { 
        System.out.print("*");
    }
    System.out.println(); // 줄을 바꾸기 위한 용도
}

안쪽 for문의 j 시작 값을 다르게 하여 출력되는 별의 개수를 컨트롤하였습니다.


while문

횟수가 정해져 있지 않은 상황에서 활용을 할 수 있는 반복문입니다. for문과 동일한 목적으로도 사용 가능합니다.
whiledo while 으로 구분됩니다. while은 반복 조건을 만족해야 한 번이라도 실행되고, do while은 반복 조건 만족과 상관없이 한번은 실행하고 조건을 따진다는 특징이 있습니다.

while ([조건식]) {
조건을 만족할 경우 실행할 문장
}

do {
조건을 따지기 전에 한번은 실행됨
조건을 만족하면 반복실행
} while([조건식]); // 마지막에 세미콜론(;)이 붙음

문제 1

💡 random() 메서드를 이용해서 1~6이 나오는 주사위를 설정하고 주사위가 계속 던져지면서 6이 나오면 종료되는 코드를 작성하라.

코드

int dice = 0;
while(dice != 6) {
    dice = (int) (Math.random() * 6) + 1;
    System.out.println("dice = " + dice);
}
System.out.println("6이 나왔습니다. 종료 !");

실행 결과

문제 2

💡 random() 메서드를 이용해서 1~100 사이의 숫자를 하나 만든다. 반복문 안에서 해당 숫자를 맞출 때까지 계속 숫자를 입력받도록 하고, 숫자를 맞추면 종료하고 몇 번만에 맞췄는지를 출력해주는 프로그램을 작성하라.

코드

Scanner scanner = new Scanner(System.in);
int n = (int) (Math.random() * 100) + 1;
boolean run = true;
int cnt = 0;
int input = 0;
while (run) {
    System.out.print("1부터 100까지의 숫자를 입력하세요: ");
    input = scanner.nextInt();
    if (input == n) {
        System.out.println("맞췄습니다.");
        run = false;
    } else if (input > n) {
        System.out.println("더 작은 수를 입력하세요.");
    } else {
        System.out.println("더 큰 수를 입력하세요.");
    }
    cnt++;
}
System.out.println("시도 횟수는 " + cnt + "회 입니다.");

실행 결과

문제 3

💡 1 + (-2) + 3 + (-4) + 5 + (-6) ... 와 같이 계산을 했을 때 합계가 100이 됐을 때의 숫자를 출력

코드

// 합계용 변수
int sum = 0;
// 1, 2, 3, 4, 5 ...
int count = 1;
// 1, -2, 3, -4, 5, -6 ...
int num = 0;
// 부호용 변수
int s = 1;
boolean run = true;
while (run) {
    sum += num;
    if (sum >= 100) {
        run = false;
    } else {
        num = s * count;
        s = -s; // 1, -1, 1, -1
        count++;
    }
}
System.out.println("num = " + num);
System.out.println("sum = " + sum);

실행 결과

문제 4: 계좌 예금, 출금, 잔고 확인 프로그램

코드

boolean run = true;
int deposit = 0; // 입금액
int withdraw = 0; // 출금액
int select = 0; // 기능선택
int balance = 0; // 잔고
Scanner scan = new Scanner(System.in); // Scanner 클래스타입의 변수 scan

while (run) {
    System.out.println("-------------------------------------");
    System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
    System.out.println("-------------------------------------");
    System.out.print("선택> ");
    select = scan.nextInt();
    if (select == 1) {
        // 예금
        System.out.print("예금액>");
        deposit = scan.nextInt();
        balance += deposit;
        System.out.println("입금이 완료되었습니다.");
        System.out.println("현재잔액은 " + balance + "원 입니다.");
    } else if (select == 2) {
        // 출금
        System.out.print("출금액>");
        withdraw = scan.nextInt();
        if (withdraw > balance) {
            System.out.println("잔고가 부족합니다.");
            System.out.println("현재잔액은 " + balance + "원 입니다.");
        } else {
            // withdraw >= balance
            balance -= withdraw;
            System.out.println("출금이 완료되었습니다.");
            System.out.println("현재잔액은 " + balance + "원 입니다.");
        }
    } else if (select == 3) {
        // 잔고
        System.out.println("현재잔액은 " + balance + "원 입니다.");
    } else if (select == 4) {
        // 종료
        run = false;
        System.out.println("종료합니다. 이용해주셔서 감사합니다.");
    } else {
        // 잘못된 선택
        System.out.println("없는 메뉴입니다. 다시 선택해주세요.");
    }
}

 


배운 점

다양한 for문과 while문 예제를 풀어보면서 활용 방법에 대해 학습하였습니다. 방정식 문제를 수학 문제를 풀듯이 푸는 것이 아니라, 모든 값을 대입하여 풀었습니다. 사람이 인지적 사고로 문제를 해결하는 것과는 다르게, 컴퓨터가 효과적으로 수행할 수 있도록 문제를 정의하고 그에 대한 답을 기술하였습니다. 이를 통해 컴퓨팅적 사고력을 기르고, 코딩이란 컴퓨터와의 대화라는 것을 다시 한 번 깨달았습니다. 또한 학부 시절 많이 연습했던 별 찍기 등을 다시 해보면서 반복문에 더 익숙해질 수 있었습니다.

반응형