
GIF 출처 : https://www.amigoscode.com/courses/java
1 ) 제어 흐름
2 ) 선택
3 ) 반복
4 ) 점프
5 ) 백준 연습문제
- 제어문의 종류
① 조건문
: 조건식의 값에 따라 각각에 해당되는 명령문을 수행
ex ) if 문 , switch 문
② 반복문
: 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다.
ex) While 문 , do 문 , for 문 , foreach 문
③ 점프문
: 제어권을 이동시킬 때 점프문을 사용한다.
ex ) label 문 , break 문 , continue 문
- 예시 ) 점수가 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+"입니다.");
}
}
}
( 조건식 ) ? 표현식 1 : 표현식2 ;
이때 삼항 조건 연산자의 경우 중첩 조건식을 통해 구현이 가능하다.

이때 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("잘못된 학점입니다.");
}
}
}
① 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+"입니다.");
}
}
- 예시 ) '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');
}
}
: 기존의 반복문으로만 코드를 사용하게 될 경우 단순한 케이스만 처리가 가능하다. 그래서 반복문을 중첩 하여 복잡한 프로그램 구조를 구성할 수 있는데 이를 중첩 반복이라 한다. 중첩 반복의 경우 대부분 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);
}
}
}
}
이는 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);
}
}
문제 목록
- 1330번 ) 두 수 비교하기 : https://www.acmicpc.net/problem/1330
- 9498번 ) 시험 성적 : https://www.acmicpc.net/problem/9498
- 2753번 ) 윤년 : https://www.acmicpc.net/problem/2753
- 14681번 ) 사분면 고르기 :
https://www.acmicpc.net/problem/14681- 2884번 ) 알람 시계 : https://www.acmicpc.net/problem/2884
- 2525번 ) 오븐 시계 : https://www.acmicpc.net/problem/2525
- 2480번 ) 주사위 세개 : https://www.acmicpc.net/problem/2480
- 2739번 ) 구구단 :
https://www.acmicpc.net/problem/2739- 10950번 ) A + B - 3 :
https://www.acmicpc.net/problem/10950- 8393번 ) 합 :
https://www.acmicpc.net/problem/8393- 25304번 ) 영수증 :
https://www.acmicpc.net/problem/25304- 25314번 ) 코딩은 체육과목 입니다 :
https://www.acmicpc.net/problem/25314- 15552번 ) 빠른 A + B :
https://www.acmicpc.net/problem/15552- 11021번 ) A + B - 7 :
https://www.acmicpc.net/problem/11021- 11022번 ) A + B - 8 :
https://www.acmicpc.net/problem/11022- 2438번 ) 별 찍기 - 1 :
https://www.acmicpc.net/problem/2438- 2439번 ) 별 찍기 - 2 :
https://www.acmicpc.net/problem/2439- 10952번 ) A + B - 5 :
https://www.acmicpc.net/problem/10952- 10951번 ) A + B - 4 :
https://www.acmicpc.net/problem/10951