JAVA

flag 변수

yujin0517 2021. 7. 2. 00:59

flag 변수 

-> flag 변수는 원래는 '깃발'이라는 의미를 가지고 있지만, 프로그래밍에서는 조건에 따라 true혹은 false값을 넣어주는 boolean형 변수입니다.

 

연습문제 1

백준 2753번 윤년

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int years = sc.nextInt();
        sc.close();
		if(years % 4 == 0) {
			if(years % 400 == 0) {System.out.println("1");}
            		else if(years % 100 == 0){System.out.println("0");}
			else {System.out.println("1");}
		}
		else System.out.println("0");
	}
}

 

이 문제를 flag 변수를 사용하며 구현해보면

public class Main {
	public static void main(String[] args) {
    
		boolean yearTF = true;	// flag 변수를 선언.
        
		for (int i = 2002; i < 2022; i++) {		
			if (i % 4 == 0 && (i % 100 != 0 || i % 400 == 0)) {  //조건에 부합할 경우 
				yearTF = true;  //flag 변수에 true,
			} else {
				yearTF = false;  // 그렇지 않을 경우 false를 대입.
			}
			
			if(yearTF) {
				System.out.println(i + ": [ 윤년 ]");
			} else {
				System.out.println(i + ":   평년  ");
			}
		}
    }
}    

 

 

연습문제 2

코드 설명 :  targetNumber에 랜덤으로 들어간 숫자가 myInput과 같을 경우, '안타'를 출력하고 그렇지 않을 경우 '스트라이크'를 출력한다. myInput을 입력할 때마다 playCount를 1씩 증가시키고 MAX_PLAY_COUNT에 대입된 숫자와 같을 경우 '삼진아웃'을 출력하여 반복문이 종료된다. '안타'가 출력되었을 경우, isPlay(flag변수)에 false이 대입되고 이후 논리식이 참이 되지 않아 반복문이 종료된다. 

Tip) isPlay를 논리식의 앞에 위치시키면 불필요한 연산을 막아 시간을 단축시킬 수 있음. (여러 가지 연산자 글 참고.)

import java.util.Random;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
    	
        Random randomNumber = new Random();
        Scanner sc = new Scanner(System.in);
        
        int targetNumber = randomNumber.nextInt(10);  // targetNumber변수에 1부터 10까지 랜덤으로 숫자를 대입.
        int playCount = 0;
        final int MAX_PLAY_COUNT = 5;  // 변하지 않는 값.
        boolean isPlay = true;  // flag 변수.
        
        System.out.println("=====타자입장====");
        System.out.println("정수 0부터 10까지 입력해주세요.");
        
        while (isPlay && playCount < MAX_PLAY_COUNT) {
            int myInput = sc.nextInt();
            if (targetNumber == myInput){
            	System.out.println("안타");
                isPlay = false;
            }
            else
            	System.out.println("스트라이크");
                
            System.out.println("playCount : " + playCount);
            playCount++;
            
            if(isPlay && playCount == MAX_PLAY_COUNT){
            	System.out.println("삼진아웃");
            }
        }
        System.out.println("targetNumber : " + targetNumber);
        sc.close();
    }
}

<콘솔 창>

안타가 나왔을 경우 반복문 종료
스트라이크만 나왔을 경우 삼진아웃이 출력

if - else 문을 나열하여 조건문을 작성하는 것보다

flag 변수를 사용하여 조건식의 참, 거짓에 따라 처리가 달라지게 하는 것이 코드 이해가 쉬워짐. 

 

 

감사합니다!

 

 

2021.07.02

'JAVA' 카테고리의 다른 글

클래스와 객체생성 및 활용  (0) 2021.07.05
객체 지향 언어(Object-oriented programming, OOP)/클래스와 객체  (0) 2021.07.03
break / continue / switch - case문  (0) 2021.07.01
for 반복문  (0) 2021.06.30
while /do - while 반복문  (0) 2021.06.29