[ JAVA ] 제어흐름 선택 , 반복

Wooju Kang ·2024년 2월 7일
post-thumbnail

GIF 출처 : https://www.amigoscode.com/courses/java

🖥 Contents


1 ) 제어 흐름

2 ) 선택

3 ) 반복

4 ) 점프

5 ) 백준 연습문제




1 ) 제어 흐름


  • 제어 흐름
    : 프로그램을 실행시키는 흐름 즉 , 작업 순서를 제어하는 것으로 순차적 실행을 원칙으로 한다. 이때 조건 혹은 반복에 의해 경로나 흐름을 바꿀 수 있는데 이를 제어라 하고 조건문 이나 반복문을 통해 제어한다.
    • 제어문의 종류
      ① 조건문
      : 조건식의 값에 따라 각각에 해당되는 명령문을 수행
      ex ) if 문 , switch 문

      ② 반복문
      : 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다.
      ex) While 문 , do 문 , for 문 , foreach 문

      ③ 점프문
      : 제어권을 이동시킬 때 점프문을 사용한다.
      ex ) label 문 , break 문 , continue 문



2 ) 선택


  • if 문
    : if - else 를 통해 조건을 형성하고 그에 따른 결과값을 통해 원하는 메소드를 실행한다.

    다음 예시는 if 구문을 사용해 점수를 구분하여 합격을 판별하는 콘솔 결과창을 얻고자 한다.
  • 예시 ) 점수가 80점 이상이면 합격을 판별
import java.util.Scanner;
public class SuccessOrFail {
public static void main (String[] args) {
Scanner in = new Scanner(System.in); 
System.out.print("점수를 입력하시오: "); 
int score = in.nextInt();
if (score >= 80)
System.out.println("축하합니다! 합격입니다."); }
}

다음 예시는 if문에 else를 포함하여 첫 조건에서 벗어난 경우에 다른 경우를 찾게 하는 예시이다.

  • 예시 ) 입력된 수가 3의 배수인지 판별
 import java.util.Scanner; 
 public class MultipleOfThree {
public static void main (String[] args) 
{ 
Scanner in = new Scanner(System.in); 
System.out.print("수를 입력하시오: "); 

int number = in.nextInt();

if (number % 3 == 0)
System.out.println("3의 배수입니다.");
else
System.out.println("3의 배수가 아닙니다."); 
    }
}

앞선 두 예시를 바탕으로 다중 if - else문을 사용해보자. 다음은 다중 if - else 문을 통해 다양한 조건을 거쳐서 원하는 결과를 얻고자 하는 코드이다. 이때 switch 문을 통해서 간결한 조건 제어를 할 수 있다.

  • 예시 ) 키보드 입력된 성적에 학점을 부여하는 프로그램 작성
import java.util.*;

public class Grading {
	public static void main(String[] args) {
		char grade;
		Scanner a = new Scanner(System.in);
		while(a.hasNext())
		{
			int score = a.nextInt();
			if(score>=90)
			{
				grade = 'A';
			}
			else if (score >=80)
			{
				grade = 'B';
			}
			else if (score >=70)
			{
				grade = 'C';
			}
			else if (score >=60)
			{
				grade = 'D';
			}
			else
			{
				grade = 'F';
			}
			System.out.println("학점은"+grade+"입니다.");
		}
	}
}


  • 삼항 조건 연산자
    : 삼항 조건 연산자는 ? 과 : 로 구성된 연산자이다, 조건식과 표현식에 해당되는 피연산자는 3개이며 값을 반환하는 간단한 형태의 if - else 을 대체할 수 있는 장점이 있다.

    삼항 조건 연산자는 다음과 같은 형태를 띄고 있다.

    ( 조건식 ) ? 표현식 1 : 표현식2 ;

이때 삼항 조건 연산자의 경우 중첩 조건식을 통해 구현이 가능하다.

  • Switch 문
    : Switch 문은 Case의 비교 값과 일치하면 해당 Case문의 실행문장을 수행하고 일치하는 것이 없는 default 문을 실행한다.

이때 Switch 문은 break 문장을 통해 Switch 문을 벗어날 수 있다. 그러므로 Case 문에서 break 문이 없다면 만족하는 모든 Case의 메소드를 실행하므로 주의하자.

다음은 Switch 문을 사용하여 조건 제어를 하고자 한다. 코드는 다음과 같다

  • 예시 ) Switch구문을 사용하여 학점에 따른 출력
public class GradeSwitch {
	public static void main(String[] args) {
		char grade = 'C';
		switch (grade)
		{
		case 'A':
		case 'B':
			System.out.println("참 잘하셨습니다.");
			break;
		case 'C':
		case 'D':
			System.out.println("좀 더 노력하세요");
			break;
		case 'F':
			System.out.println("다음 학기에 다시 수강하세요.");
			break;
		default:
			System.out.println("잘못된 학점입니다.");
		}
	}
}






3 ) 반복


  • 반복 구조
    : 같은 작업 또는 비슷한 작업을 반복시키는 것을 처리하기 위해 설계된 구조로 while , do - while , for 문 등이 있다. 이때 선택과 같이 종료 조건이 추가된다.

For 문

: for 문은 초기문이 반복 조건에 따라 초기문의 상태변화를 이끌면서 동시에 그와 비교하는 조건식을 삽입하여 조건에 맞을경우 메소드를 반복하고 그 후에 상태변화를 일으키는 형태의 반복문이다.

for문은 다음과 같은 형태를 띄고 있다.

for ( 초기문 ; 조건식 ; 반복 후 작업 ){ 반복하고 하는 메소드 }

for문은 정해진 횟수만큼 반복할 때 사용되며 반복횟수가 증가할수록 기존의 코드를 여러번 작성하는 것보다 가독성효율성 면에서 장점이 있다. 효율성면에서는 시간 복잡도 및 공간 복잡도와 관련이 있는데 이와 관련된 부분은 프로그래밍 언어론 에서 자세히 설명한다.

다음은 for 구문을 이용하여 덧셈을 시행하는 프로그램을 만들고자 한다. 코드는 다음과 같다.

  • 예시 ) 1 부터 10까지 덧셈을 표시하고 합 계산
public class ForSample {
	public static void main(String[] args) {
		int i , j;
		for( j = 0 , i = 1 ; i <=10; i++)
		{
			j += i;
			System.out.print(i);
			if (i==10)
			{
				System.out.print("=");
				System.out.print(j);
			}
			else 
			{
				System.out.print("+");
			}
		}
	}
}

다음은 사용자로부터 정수를 입력받아 factorial 계산을 하는 프로그램을 만들고자 한다. factorial 알고리즘은 reculsive 구현의 가장 기초적인 알고리즘이므로 잘 학습해 두자.

코드는 다음과 같다.

  • 예시 ) 사용자로부터 정수를 입력받아 factorial을 계산
import java.util.*;

public class Factorial {
	public static void main(String[] args) {
		long fact = 1;
		int n;
		System.out.println("정수를 입력하시오: ");
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		
		for ( int i = 1; i<=n;i++)
		{
			fact = fact * i;
		}
		System.out.printf("%d!는 %d입니다.",n,fact);
}

② While 문
: 반복 조건이 true 이면 반복 , false 이면 반복을 종료하는 형태이다. 반복 조건이 없으면 컴파일 오류가 발생하며 처음부터 반복 조건을 통과한 후 작업문을 수행한다.

이때 while 문은 두가지 형태가 존재하는데 다음과 같다.

(1) while ( 조건 ) { 메소드 }

(2) do { 메소드 } while ( 조건 )

(2) 경우의 do - while 문의 경우 일반적인 while 문 과 달리 while의 조건에 상관없이 무조건 1회 실행된다.

다음은 while문을 사용하여 입력된 수의 평균값을 출력하고자 하는 프로그램이다. 코드는 다음과 같다.

  • 예시 ) 사용자로부터 숫자를 입력받아 평균 출력하기
import java.util.*;

public class WhileSample {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = 0;
		double sum = 0;
		int i = 0;
		while((i=scan.nextInt())!=0)
		{
			sum += i;
			n++;
		}
		System.out.print("입력된 수의 개수는"+n+"개이며 평균은 "+ sum/n+"입니다.");
	}
}

다음은 do - while 을 이용하여 알파벳 a - z까지 출력하는 프로그램을 작성하고자 한다. 코드는 다음과 같다.
  • 예시 ) 'a' 부터 'z' 까지 출력
public class DoWhileSample {
	public static void main(String[] args) {
		char a = 'a';
		do 
        {
			System.out.println(a);
			a = (char)(a+1);
		}
		while(a <='z');
	}
}



  • 중첩 반복 ( Nested - Loop )

: 기존의 반복문으로만 코드를 사용하게 될 경우 단순한 케이스만 처리가 가능하다. 그래서 반복문을 중첩 하여 복잡한 프로그램 구조를 구성할 수 있는데 이를 중첩 반복이라 한다. 중첩 반복의 경우 대부분 2중 반복 또는 3중 반복을 사용하며 이를 넘어서는 n중 반복은 프로그램의 가독성을 떨어뜨리므로 사용할 때 잘 결정하는게 중요하다.

중첩 반복의 경우 알고리즘 수업에서 굉장히 많이 쓰는 제어문으로 선택 , 삽입 , 버블 등.. 다양한 알고리즘에 사용되므로 사용하는법에 익숙해지는 것이 좋다.


다음은 중첩 for문을 사용하여 구구단을 한 줄에 한 단씩 출력하는 프로그램을 구성하고자 한다. 코드는 다음과 같다.

  • 예시 ) 중첩 for문을 이용한 구구단 출력기
public class NestedLoop {
	public static void main(String[] args) {
		int i , j;
		
		for ( i = 1 ; i < 10 ; i++ , System.out.println())
		{
			for ( j = 1 ; j < 10 ; j++,System.out.println("\t"))
			{
				System.out.print(i + "*" + j + "=" + i*j);
			}
		}
	}
}




4 ) 점프


  • 점프
    : 제어 흐름에서 빠져나오기 위해서 사용한다. 특히 반복문의 경우 무한 루프의 위험성이나 Switch 문 처럼 모든 Case를 만족하는 경우가 존재할 수 있기 때문에 빠져나올 수 있는 장치를 마련해둘 필요가 있다. 이러한 장치에는 continue
    가 존재한다.

이는 C언어와 Python에서 학습한 바가 있으므로 간단히 그림으로 원리를 대체한다.

다음은 for 문과 continue 를 혼합하여 1 부터 100까지 짝수의 합을 계산하는 프로그램을 만들고자 한다. 코드는 다음과 같다.

  • 예시 ) 1 부터 100까지의 짝수 합하기
public class ContinueExample {

	public static void main(String[] args) {
		int sum = 0;
		for ( int i = 1 ; i <= 100; i++)
		{
			if ( i % 2 == 1)
			{
				continue;
			}
			else
			{
				sum += i;
			}
		}
		System.out.println("1부터 100까지 짝수의 합은"+sum);
	}
}




5 ) 백준 연습문제


문제 목록

  • ' 15552번. 빠른 A + B ' 의 경우 BufferReader 및 Stream 에 관한 학습이 필요하므로 학습을 한 후 풀어보는 것을 추천한다.

profile
배겐드 📡

0개의 댓글