본문 바로가기
자격증·공부 아카이브/Java 기초

Java 조건문·반복문·배열: 코딩테스트 입문

by 쑥쑥자라나라 2026. 7. 15.
728x90

Java 문법을 처음 배울 때 조건문, 반복문, 배열을 따로 외우면 예제는 풀어도 실제 문제 앞에서 자주 막힙니다. 이 글은 세 문법이 한 프로그램 안에서 어떻게 이어지는지 보여주기 위해, 시간외수당 계산부터 점수 통계까지 직접 실행할 수 있는 예제로 정리했습니다.

코드를 읽는 순서는 간단합니다. 먼저 입력값이 무엇인지 확인하고, 조건에 따라 흐름을 나눈 뒤, 반복해서 처리할 데이터는 배열에 담습니다. 문법 이름보다 이 흐름을 익히는 것이 코딩테스트 입문에도 훨씬 도움이 됩니다.

먼저 보는 핵심

  • 조건문은 값에 따라 실행할 코드를 고릅니다.
  • 반복문은 같은 규칙을 여러 값에 적용합니다.
  • 배열은 반복해서 다룰 값을 순서대로 보관합니다.

1. 조건문: 시간외수당 계산으로 익히기

가장 먼저 풀어볼 문제는 근무 시간에 따른 급여 계산입니다. 시급은 5,000원이고 8시간을 초과한 시간에는 시급의 1.5배를 적용한다고 가정하겠습니다. 여기서 중요한 것은 계산식보다 8시간 이하와 초과를 어디에서 나눌지입니다.

import java.util.Scanner;

public class OvertimePay {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        final int HOURLY_WAGE = 5_000;
        final int STANDARD_HOURS = 8;
        final double OVERTIME_RATE = 1.5;

        System.out.print("근무 시간을 입력하세요: ");
        int hours = scanner.nextInt();

        if (hours < 0) {
            System.out.println("근무 시간은 0 이상이어야 합니다.");
        } else {
            double pay;

            if (hours <= STANDARD_HOURS) {
                pay = hours * HOURLY_WAGE;
            } else {
                int overtimeHours = hours - STANDARD_HOURS;
                pay = STANDARD_HOURS * HOURLY_WAGE
                        + overtimeHours * HOURLY_WAGE * OVERTIME_RATE;
            }

            System.out.printf("총 급여: %,.0f원%n", pay);
        }

        scanner.close();
    }
}

10시간을 입력하면 기본 8시간 급여 40,000원에 초과 2시간 급여 15,000원이 더해져 총 55,000원이 나옵니다. 초과근무 전체에 1.5배를 곱하는 것이 아니라, 8시간을 넘긴 부분에만 할증을 적용해야 합니다.

조건문에서 자주 틀리는 부분

  • <<=의 경계값을 바꿔 쓰는 실수
  • 음수처럼 허용되지 않는 입력을 먼저 걸러내지 않는 실수
  • 금액 계산에 소수 배율이 들어가는데 결과 자료형을 int로만 두는 실수
  • 숫자 5,000을 코드 곳곳에 반복해 수정하기 어렵게 만드는 실수

예제처럼 의미가 있는 값은 상수로 이름을 붙이면 계산식이 문장처럼 읽힙니다. 코딩테스트에서는 짧은 코드가 유리할 때도 있지만, 학습 단계에서는 STANDARD_HOURS처럼 의도가 보이는 이름을 쓰는 편이 실수를 줄여줍니다.

728x90

 

2. 반복문: 같은 규칙을 여러 번 적용하기

조건문이 한 번의 선택이라면 반복문은 같은 판단을 여러 값에 적용하는 도구입니다. 반복 횟수가 명확하면 for, 특정 조건이 만족될 때까지 계속해야 하면 while이 자연스럽습니다.

1부터 100까지 합 구하기

int sum = 0;

for (int number = 1; number <= 100; number++) {
    sum += number;
}

System.out.println(sum); // 5050

반복문은 초기값, 계속할 조건, 값의 변화 세 부분으로 읽으면 됩니다. number는 1에서 시작하고, 100 이하인 동안 실행되며, 한 번 실행할 때마다 1씩 커집니다. 합계를 담는 sum은 반복문 밖에 선언해야 반복이 끝난 뒤에도 결과를 사용할 수 있습니다.

조건을 만족할 때까지 입력받기

Scanner scanner = new Scanner(System.in);
int number;

while (true) {
    System.out.print("1부터 10 사이 숫자 입력: ");
    number = scanner.nextInt();

    if (number >= 1 && number <= 10) {
        break;
    }

    System.out.println("범위를 벗어났습니다. 다시 입력하세요.");
}

이 예제에서 반복 횟수는 미리 알 수 없습니다. 대신 올바른 숫자가 들어오면 break로 반복을 끝냅니다. 무한 반복을 쓸 때는 반드시 종료 조건이 실제로 실행될 수 있는지 확인해야 합니다.

3. 배열: 여러 값을 하나의 이름으로 관리하기

학생 다섯 명의 점수를 각각 다른 변수에 저장하면 평균을 구하거나 최고점을 찾을 때 코드가 길어집니다. 배열에 담으면 인덱스를 이용해 같은 규칙을 반복 적용할 수 있습니다.

int[] scores = {78, 92, 85, 64, 88};

int total = 0;
int max = scores[0];

for (int score : scores) {
    total += score;

    if (score > max) {
        max = score;
    }
}

double average = (double) total / scores.length;

System.out.printf("평균: %.1f점%n", average);
System.out.println("최고점: " + max + "점");

향상된 for문은 배열의 값을 처음부터 끝까지 읽을 때 편합니다. 반대로 특정 위치의 값을 바꾸거나 인덱스가 필요하면 일반 for문이 낫습니다.

for (int i = 0; i < scores.length; i++) {
    System.out.printf("%d번 학생: %d점%n", i + 1, scores[i]);
}

배열의 핵심 실수

배열의 첫 인덱스는 0이고 마지막 인덱스는 length - 1입니다. 반복 조건을 i <= scores.length로 쓰면 마지막에 존재하지 않는 위치에 접근해 ArrayIndexOutOfBoundsException이 발생합니다.

4. 세 문법을 한 문제로 연결하기

이제 점수 배열을 순회하면서 합격자 수, 평균, 최고점을 한 번에 구해보겠습니다. 배열이 데이터를 보관하고, 반복문이 모든 점수를 꺼내며, 조건문이 합격 여부와 최고점을 판단합니다.

public class ScoreSummary {
    public static void main(String[] args) {
        int[] scores = {78, 92, 85, 64, 88};
        final int PASS_SCORE = 70;

        int total = 0;
        int passCount = 0;
        int max = scores[0];

        for (int score : scores) {
            total += score;

            if (score >= PASS_SCORE) {
                passCount++;
            }

            if (score > max) {
                max = score;
            }
        }

        double average = (double) total / scores.length;

        System.out.printf("평균: %.1f점%n", average);
        System.out.println("최고점: " + max + "점");
        System.out.println("합격자: " + passCount + "명");
    }
}

이 구조는 점수뿐 아니라 주문 금액, 센서 측정값, 게임 기록처럼 여러 데이터를 요약할 때 그대로 응용할 수 있습니다. 문제를 읽고 저장할 값, 반복할 범위, 판단할 조건을 각각 찾으면 코드의 뼈대가 먼저 보입니다.

5. 코딩테스트 입문 문제를 푸는 순서

  1. 입력과 출력을 예시 값으로 직접 적습니다.
  2. 한 번만 판단할지, 여러 값을 반복할지 구분합니다.
  3. 경계값 0, 1, 최솟값, 최댓값을 먼저 테스트합니다.
  4. 배열이 비어 있을 가능성과 인덱스 범위를 확인합니다.
  5. 정답이 나온 뒤 변수 이름과 중복 계산을 정리합니다.

직접 바꿔볼 연습 문제

  • 급여 계산기에 주말 근무 2배 조건을 추가해보기
  • 점수 배열에서 90점 이상 인원과 60점 미만 인원 세기
  • 최고점뿐 아니라 최저점도 함께 구하기
  • 사용자가 입력한 인원 수만큼 점수를 받아 배열에 저장하기

마무리

조건문, 반복문, 배열은 따로 존재하는 문법이 아니라 대부분의 입문 문제에서 함께 움직이는 기본 도구입니다. 조건문은 선택하고, 반복문은 적용하며, 배열은 대상을 보관합니다. 세 문장을 떠올린 뒤 문제를 분해하면 긴 코드도 훨씬 단순하게 읽힙니다.

예제 코드를 그대로 실행한 뒤 숫자와 조건을 바꿔보세요. 오류가 생겼다면 정답만 다시 보는 것보다 어느 입력에서 흐름이 달라졌는지 한 줄씩 추적하는 과정이 실력을 빠르게 늘려줍니다.

728x90