05. 반복문(Iteration statements) [ JAVA ]

duck-ach·2022년 7월 21일
0

JAVA

목록 보기
5/27

반복문

반복문(Iteration statements, loop)은 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문 입니다.

for문

  • 어떤 실행문을 여러번 반복해서 실행하는 경우에 사용한다.
  • 조건문을 만족하면 계속해서 실행한다.
  • 실행문은 중괄호 {} 로 묶어서 표시한다.
  • 형식
    for(초기문; 조건문; 증감문) {
     	 실행문
    }

바로 예제를 풀어보도록 하겠다.

1에서 10까지의 숫자를 출력하시오.

이 문제도 System.out.println("1"); System.out.println("2"),,, 등등 쭉쭉 반복되는 코드를 반복문을 이용하여 혁신적으로 줄여줄 수 있다.

public class ExampleFor1 {
	public static void main(String[] args) {
    
    for(int i=1; i<=10; i++) {
    	System.out.print(i + " "); // 1 2 3 4 5 6 7 8 9 10
    }
    
    
    
    }
}

10에서 1까지의 숫자를 출력하시오.

public class ExampleFor2 {
	public static void main(String[] args) {
    
    for(int a = 10; a>=1; a--) {
			System.out.print(a + " "); // 10 9 8 7 6 5 4 3 2 1
		}
		      
    }
}

순차적으로 숫자를 출력하는 것으로 for문의 형식을 외울 수 있었다. 이제 조건을 하나 둘씩 더 걸어서 구현을 해보도록 하겠다.

알고리즘 문제에서 많이 보았던 구구단 문제이다. 현재 7월달이니 구구단 7단을 출력해보겠다.

구구단 7단을 출력하시오.

public class ExampleFor3 {
	public static void main(String[] args) {
    
   		int dan = 7;
		for(int chill = 1; chill <= 9; chill++) {
			System.out.println("구구단 7단 : " + dan + " X " + chill + " = " + (dan*chill));   
		}
		}
        
        	//구구단 7단 : 7 X 1 = 7
			//구구단 7단 : 7 X 2 = 14
			//구구단 7단 : 7 X 3 = 21
			//구구단 7단 : 7 X 4 = 28
			//구구단 7단 : 7 X 5 = 35
			//구구단 7단 : 7 X 6 = 42
			//구구단 7단 : 7 X 7 = 49
			//구구단 7단 : 7 X 8 = 56
			//구구단 7단 : 7 X 9 = 63
		      
    }
}

구구단을 구현하는 것도 알고리즘을 이해하면 구현하기 쉽다.
처음에는 엄청 버벅거리고 며칠을 헤맸는데 이젠 바로바로 구현이 가능한 것을 보니 코드와 싸운 효과가 있나보다.

1 ~ 100 사이의 모든 3의 배수만 출력하기

나머지를 활용하는 modular연산을 이용해서 구현할 수 있다.

public class ExampleFor4 {
	public static void main(String[] args) {
    
    for(int n = 1; n <= 100; n++) {
			if(n%3 == 0) {
				System.out.print(n + " ");
			}
		}
		// 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99      
    }
}

1 ~ 100 모든 정수 더하기 (5050)

public class ExampleFor5 {
	public static void main(String[] args) {
    
		int sum = 0;
		for(int i=1; i<=100; i++) {
			sum += i;
		}
		System.out.println("전체 합 : " + sum);
        // 전체 합 : 5050
    }
}

이렇게 대입연산자를 활용한 반복문도 많이 활용되는것 같으니 잘 알아두어야겠다.

  • begin ~ end 모든 정수 더하기.
  • begin과 end 중 누가 큰지 모르는 상황, begin이 항상 end보다 작은 값이어야 함

조건문과 함께 활용해서 해결하면 된다.

public class ExampleFor6 {
	public static void main(String[] args) {
    
		int begin = 10;
		int end = 1;
		int total = 0;
		// begin이 end보다 큰 경우
		if(begin>end) {		
			int temp;			
			temp = begin;
			end = begin;
			begin = temp;			
			for(begin=0; begin<=end; begin++) {
				total += begin;
			}
			System.out.println("begin+total=" + total);	

		} else {
		// begin이 end보다 작은 경우
			for(begin=0; begin<=end; begin++) {
				total += begin;
			}
			System.out.println("begin+total=" + total);
            //begin+total=55
			
		}
    }
}

이렇게 풀어도 되지만 비슷하지만 조금 더 간단하게 구현할 수도 있다.

public class ExampleFor7 {
	public static void main(String[] args) {
    
		int begin = 5;
		int end = 1;
		
		if(begin > end) {
			int temp;
			temp = begin;
			begin = end;
			end = temp;
		}
		
		int total = 0;
		for(int n=begin; n<=end; n++) {
			total += n;
		}
		System.out.println("begin+total=" + total);
        // begin+total=15
    
    }
}

평점에 따른 별(★) 출력하기

public class ExampleFor8 {
	public static void main(String[] args) {
    	int point = 1;
		String star = "";
		// n=0으로 초기화하면 조건문에서 n < point 라고 해도 되고,
		// n=1으로 초기화하면 조건문에서 n <= point라고 하면된다.
		for(int n = 0; n < point; n++) {
			star += "★";
		}
		System.out.println(star);
        //★
		
    
    }
}

While문

  • 특정 실행문을 반복할 때 사용한다.
  • 특정 반복 횟수가 정해지지 않은 경우에 사용한다.
  • 형식
public class while {
	public static void main(String[] args) {
    while(조건문) {
    	실행문
   	}
    }
}

형식은 if문과 유사하게 생겼다.

  • 실무에서는 API나 File, Database를 읽을 때 많이 사용된다고 한다.

예제를 풀어보자면

보이스피싱을 당해서 통장 잔고 중 450원씩 계속 빠져나간 내용을 표시하시오.

public class while1 {
	public static void main(String[] args) {
    	int balance = 79350;
		int money = 450;
		
		while(balance>=money) {
			
			System.out.println("잔액 " + balance + " 인출액 " + money);
			balance -= money;
		}
		System.out.println("잔액 " + balance);
        // 잔액과 인출액을 통장잔고가 바닥날 때 까지 반복하여 나타낸 후, 빠져나가지 못한 마지막 남은 잔액 150원이 표시된다.
    }
}

break문

조건문 안의 내용이 true라면 무한반복 된다.
반복문을 멈추고 싶을 때 switch에서 사용했던 break문을 사용하여 멈출 수 있다.

예제를 풀어봅시다.

크리스마스 모금을 받는데 모금 목표가 100000원이다.
한번에 30원씩 모금할 수 있는데 몇번 모금을 받아야 할까요?

public class break {
	public static void main(String[] args) {
    	int total = 0;
		int money = 30;
		int serial = 0;
		int goal = 100000;
		while(true) { //무한루프
			if(total>=goal) {
				break;
			}
			total += money;
			serial++;
			System.out.println(serial + "회 모금액 " + money + "\t현재 " + total + "원");
		} // 계속 반복되어 누적되는 것을 기록하여 보여주다가 
        // 마지막에 '3334회 모금액 30        현재 100020원' 을 표시해서 보여준다.
		System.out.println();
        System.out.println(serial + "회"); // 3334회
    }
}

Continue문

  • 반복문(for, while)을 종료시키지 않고, 반복문의 시작 지점으로 이동한다.
  • 반복문에서 실행을 제외하고 싶은 경우에 사용한다.
  • 실무에서는 continue대신 활용할 수 있는 좋은 코드들이 있기 때문에 많이 중요하지 않다.
  • 형식
public class continue {
	public static void main(String[] args) {
    	while(true) {
        a;
        b;
        c;
        continue; // a b c 만 실행하고 다시 while()문으로 이동한다.
        d;
        e;
        f;
        g; // d e f g는 실행되지 않는다. (Dead Code)
        }
    }
}

예제를 풀어보자.

1~ 100 중에서 3의 배수를 제외하고 모두 더하기

Continue를 사용한 풀이

public class continue {
	public static void main(String[] args) {
    	int n = 0;
		int total = 0;

		while(n < 100) {
			
			n++;
			if(n % 3 == 0) {
				continue;
			}
			total += n;
		}
		System.out.println(total); //3367
    }
}

Continue를 사용하지 않은 풀이

public class continue {
	public static void main(String[] args) {
    	int sum = 0;
		int a = 0;
		while(a<100) {
			a++;
			if(a % 3 != 0) {
			sum += a;
		}
	}
    	System.out.println(sum); // 3367
    }
}

Continue를 사용하지 않은 풀이가 더 간결하고 나중에 코드를 바꿀때도 더 이해하기 쉬울 것 같다.

profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글