04. 조건문(Conditional Statements) [ JAVA ]

duck-ach·2022년 7월 20일
0

JAVA

목록 보기
4/27

조건문(Conditional Statements)

조건문(Conditional)이란 어떤 조건이 주어질 때 어떤 동작을 수행하도록 하는, 즉 조건에 따라 값이 달라지게 하는 것이다.

  • 종류 : if문, if-else문, else-if문, switch문 등

if문

  • 조건을 만족하는 경우에만 실행
  • 실행문은 중괄호{}로 묶어서 표시
  • 실행문이 단일 문장인 경우 중괄호{} 생략 가능

score가 60점 이상일 경우 "합격", 아니라면 "불합격"

public class IF{
	public static void main(String[] args) {
    
    int score = 70;
    
    if(score >= 60) {
    	System.out.println("합격");
        System.out.println("축하합니다");
    } 
    if(score < 60){
    	System.out.println("불합격");
    }
    
    
    }
}
	

위의 코드는 "합격" "축하합니다"를 출력한다.
이렇게 괄호()안에 조건을 넣고 중괄호{} 안에 실행문을 넣어서 실행시키면 되는 간단한 코드이다.

if-else문

  • 조건을 만족하는 경우와 그렇지 않은 경우 모두 처리한다.
  • 위의 if문의 상위버전이라고 할 수 있다.

if문에서 예시를 들었던 예제로 다시 풀어보도록 하겠다.

score가 60점 이상일 경우 "합격", 아니라면 "불합격"

public class IfElse{
	public static void main(String[] args) {
    
    int score = 70;
    
    if(score >= 60) {
    	System.out.println("합격");
        System.out.println("축하합니다");
    } else {
    	System.out.println("불합격");
    }
    
    
    }
}
	

위의 if문으로 두번 작성해야 하는 것을 관련된 것처럼 연결하여 작성하니 훨씬 깔끔 한 것 같다.
가급적이면 if문 보다는 if-else문을 사용하는 것이 좋다.

else-if문

  • 조건문이 많은 경우에 사용
  • 실행문은 중괄호{}로 묶어서 표시
  • 실행문이 단일 문장인 경우 중괄호{} 생략 가능
  • else if는 조건이 있는 만큼 사용가능하다.

나이에 따른 결과를 출력하시오.

  • 7세이하 : 미취학아동
  • 8세이상 13세이하 : 초등학생
  • 14세이상 16세이하 : 중학생
  • 17세이상 19세이하 : 고등학생
  • 20세 이상 : 성인
public class ElseIfAge{
	public static void main(String[] args) {
    
    	int age = 5;
		
		if(age < 0 || age > 100) {
			System.out.println("잘못된 나이");
		} else if(age <= 7) {
			System.out.println("미취학 아동");
		} else if(age <= 13) {
			System.out.println("초등학생");
		} else if(age <= 16) {
			System.out.println("중학생");
		} else if(age <= 19) {
			System.out.println("고등학생");
		} else {
			System.out.println("성인");
		}
    
    
    }
}
	

월에 따른 계절을 출력하시오.

  • 봄 : 3~5월
  • 여름 : 6~8월
  • 가을 : 9~11월
  • 겨울 : 12, 1~2월

이 문제는 두가지방법으로 풀 수 있다.
일반적인 방법

public class ElseIfSeason1{
	public static void main(String[] args) {
    
		int month = 3;
        
		if(month < 1 || month > 12) {
			System.out.println("잘못된 월");
		} else if (month == 12 || month <= 2) {
			System.out.println("겨울");
		} else if (month <= 6) {
			System.out.println("봄"); 
		} else if (month <= 8) {
			System.out.println("여름");
		} else {
			System.out.println("가을");
		}
    
    }
}
	

나머지 연산을 활용한 modular 연산

public class ElseIfSeason2{
	public static void main(String[] args) {
    
		int mod = month % 12;
		if(mod <= 2) {
			System.out.println("겨울");
		} else if (mod <= 5) {
			System.out.println("봄");
		} else if (mod <= 8) {
			System.out.println("여름");
		} else {
			System.out.println("가을");
		}
    
    }
}
	

점수에 따른 학점을 구하시오.

  • 100 ~ 90점 : A학점
  • 89 ~ 80점 : B학점
  • 79 ~ 70점 : C학점
  • 69 ~ 60점 : D학점
  • 59 ~ : F학점
public class ElseIfScore{
	public static void main(String[] args) {
    
		int score = 100;
		char grade = 'F';
		
		if(score < 0 || score > 100) {
			System.out.println("확인되지 않는 점수입니다.");
		} else if (score >= 90) {
			System.out.println(grade = 'A');
		} else if (score >= 80) {
			System.out.println(grade = 'B');
		} else if (score >= 70) {
			System.out.println(grade = 'C');
		} else if (score >= 60) {
			System.out.println(grade = 'D');
		} else {
			System.out.println(grade = 'F');
		}
		System.out.println("점수는 " + score + "점");
		System.out.println("학점은 " + grade + "학점");
        
       //결과 : 점수는 100점
       //결과 : 학점은 A학점
    
    }
}
	

마지막예제!
오직 일 수만 고려하여 1일이 수요일일 경우 n일 후 무슨 요일인지 출력하시오.

public class ElseIfSeason2{
	public static void main(String[] args) {
    
		int day = 1;
		int n = 1;
		String weekName; //목요일
		
		int mod2 = day+n % 7;
		if (mod2 == 1) {
			weekName = "수";
		} else if (mod2 == 2) {
			weekName = "목";
		} else if (mod2 == 3) {
			weekName = "금";
		} else if (mod2 == 4) {
			weekName = "토";
		} else if (mod2 == 5) {
			weekName = "일";
		} else if (mod2 == 6) {
			weekName = "월";
		} else {
			weekName = "화";
		}
		System.out.println(weekName + "요일");
    
    }
}
	

이 문제도 modular연산을 이용한 방법이었다!

Switch문

  • 표현식의 결과 값에 따른 분기를 처리한다.
  • 표현식의 결과 값은 double, boolean 데이터 타입일 수 없다.
  • break는 switch문을 종료한다는 뜻이다. (break문이 없다면 case를 무시하고 switch문을 끝까지 실행하고 종료)

바로 예제를 풀어보며 switch문을 익혀보자.

각 층별 관리자를 출력하시오.

각 층별 관리자

  • 1~2층 : 전지현
  • 3~4층 : 한지민
  • 5~6층 : 박은빈
  • 나머지 : 동그라미
public class Manager{
	public static void main(String[] args) {
    int floor = 1;
		String manager;
		
		switch(floor) {
		case 1 : 
		case 2 : manager = "전지현"; break;
		case 3 : 
		case 4 : manager = "한지민"; break;
		case 5 :
		case 6 : manager = "박은빈"; break;
		default: manager = "동그라미";
		}
		System.out.println(floor + "층" + " / Manager : " + manager);
        // 1층 / Manager : 전지현
    }
}

처음에는 case 1 : case 2 : manager = "전지현"; break; 이런식으로 한줄에 다 적었었는데, 풀이는 저렇게 줄바꿈으로 되어있었다. 그래도 이건 개인적인 스타일에 따라 다르기때문에 코드가 깔끔하게만 보이면 될 것 같다.

그 다음은 난이도가 아주 쉬웠던 그냥 일반적인 짝수 홀수 문제다.

숫자 n이 주어지면 짝수인지 홀수인지 알려주시오.

public class Manager{
	public static void main(String[] args) {

   		int n = 3;
		
		switch(n % 2) {
		case 0 : System.out.println("짝수"); break;
		default: System.out.println("홀수");
    }
}

mod변수를 만들어서 풀어도 무관하다.

주어진 월에 따라 분기를 출력하시오.

  • 1 ~ 3월 : 1분기
  • 4 ~ 6월 : 2분기
  • 7 ~ 9월 : 3분기
  • 10 ~ 12월 : 4분기
  • (추가조건) default생략, 스위치 내부의 case 4개로 제한.
public class Manager{
	public static void main(String[] args) {

   		int month = 6;
		
		switch((month-1) / 3 ) {
			case 0: System.out.println("1분기"); break;
			case 1: System.out.println("2분기"); break;
			case 2: System.out.println("3분기"); break;
			case 3: System.out.println("4분기"); break;
			
		}
    }
}

month - 1을 해주는 이유는 3,6,9,12가 주어졌을때 3의 배수여서 1,2,3,4를 도출해 내기 때문이다.

점수에 따른 학점을 출력하시오.

  • 점수 = score, 학점 = grade
  • 100 ~ 90 = A
  • 89 ~ 80 = B
  • 79 ~ 70 = C
  • 69 ~ 60 = D
  • 59 ~ = F
public class Manager{
	public static void main(String[] args) {

   		int score = 100;
		String grade = "F";
		
		switch (score / 10) {
		
		case 10 :
		case 9  : grade = "A"; break;
		case 8  : grade = "B"; break;
		case 7  : grade = "C"; break;
		case 6  : grade = "D"; break;
		default : grade = "F"; 
		
        System.out.println(score + "점은 " + grade + "학점입니다.");
		}
        // 100점은 A학점입니다.
			
    }
}

몫(/)연산을 활용하여 풀 수 있는 문제다.

등급(1, 2, 3)에 따른 권한 출력

  • 1등급 : 쓰기 실행 읽기
  • 2등급 : 실행 읽기
  • 3등급 : 읽기
public class Manager{
	public static void main(String[] args) {

   		int level = 1;
		String right = ""; //권한
		
		switch(level) {
		case 1 : right = "쓰기 실행 읽기"; break;
		case 2 : right = "실행 읽기"; break;
		case 3 : right = "읽기"; break;
		default : right = "잘못된 권한";
		}
		System.out.println("당신의 등급은 " + level + "등급입니다.");
		System.out.println("당신의 권한은 " + right + "입니다.");
	
    	//당신의 등급은 1등급입니다.
        //당신의 권한은 쓰기 실행 읽기입니다.
    }
}

이 방법 말고 break를 활용하는 방법이 있다.

(조건 추가 ++)
나머지 : 없음

public class Manager{
	public static void main(String[] args) {

   		int level = 0;
		String right = ""; //권한
		
		switch(level) {
		
		case 1 : right += "쓰기 "; 
		case 2 : right += "실행 ";
		case 3 : right += "읽기"; break;
		//default : System.out.println("없음");
		default : right += "없음";
		
		}
		System.out.println(right);
    }
}

이렇게 풀게 되면 1등급이면 case1부터 case3까지 실행되어 '쓰기 실행 읽기'가 출력될 것이고, 3등급이면 case3부터 break; 까지 실행되어 '읽기'만 출력될 것이다.


위의 방법은 우리가 자주 사용하는 웹툰들이나 목록
페이지수가 여러개 필요할 때 자주 쓰이는 알고리즘이니 기억해두자! 중요중요!

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

0개의 댓글