Skip to main content

12. [Java] 옹알이(1): break vs continue

1. 문제 요약


2. 전체 코드

import java.util.*;

class Solution {
    public int solution(String[] babbling) {
        String[] canSay = {"aya", "ye", "woo", "ma"};
        int count = 0;

        for (String word : babbling) {
            String temp = word;
            boolean isValid = true;

            for (String say : canSay) {
                // 중복된 발음이 있는지 확인
                if (temp.contains(say + say)) {
                    isValid = false;
                    break;
                }
            }

            if (!isValid) continue;

            // 발음 가능 단어 제거
            for (String say : canSay) {
                temp = temp.replace(say, " ");
            }

            // 모두 제거되었는지 확인 (공백만 남은 경우 trim()으로 제거)
            if (temp.trim().isEmpty()) {
                count++;
            }
        }

        return count;
    }
}


3. 같은 단어 중복인지 확인하는 코드

if (temp.contains(say + say)) {
    isValid = false;
    break;
}
  • 이 코드는 같은 단어가 두 번 연속 사용된 문자열을 걸러내기 위해 사용된다.
  • 조카는 "ayaaya"처럼 같은 단어를 두 번 연속 발음하지 못하기 때문이다.
  • 그래서 "ayaaya", "mama", "woowoo" 같은 경우는 불가능한 발음이다.
  • 예르 들어, say = "aya" 라고 할 때 say + say는 "ayaaya"이다.
  • temp.contains("ayaaya")는 temp 문자열 안에 "ayaaya"가 들어 있는지를 확인한다.

4. continue

  • isValid가 false일 경우 → 이 단어는 조카가 말할 수 없는 단어이므로 아래 로직은 더 이상 실행하지 않고, 다음 단어로 넘어감
  • 반복문 안에서 continue는 현재 반복을 중단하고 다음 반복으로 건너뜀을 의미한다.
for (String word : babbling) {
    // 어떤 조건으로 유효한 발음인지 검사
    if (!isValid) continue;

    // 여기 있는 코드는 건너뜀!
}
  • !isValid가 true이면, 즉 isValid == false이면
  • → 현재 word는 조건에 맞지 않으니까
  • → 아래 replace 등의 처리를 하지 않고
  • → 바로 다음 word로 넘어감.

5. break

  • break의 역할: "반복문 하나만 탈출"해서 즉시 종료
  • 이중 루프 중에 안쪽에 있으면 그 안쪽 루프만 빠져나온다.
for (String say : canSay) {
    if (temp.contains(say + say)) {
        isValid = false;
        break; // ✅ 이 for 루프를 빠져나옴!
    }
}

여기서 break;는 바로 canSay 배열을 순회하는 for문을 탈출한다.

따라서 그 다음 실행되는 건 → continue; 실행됨 → 이 단어는 skip하고 다음 단어로 넘어가는 로직이 실행된다.

if (!isValid) continue;

6. continue VS break

for each word in babbling:
    for each say in canSay:
        if word contains say+say:
            isValid = false
            break ← 여기서 안쪽 for문 탈출
    if (!isValid) continue ← 이 줄로 와서 현재 word 스킵
  • break :가장 가까운 반복문 전체를 탈출
  • continue : 현재 반복을 건너뛰고, 다음 반복을 바로 실행