강의로 돌아가기
박예서

같은 로직인데 틀린 이유

1번 방식 :
import java.util.*;

class Solution {
public int solution(String[] babbling) {
int cnt = 0;
List speak = Arrays.asList("aya", "ye", "woo", "ma");

    for (String bab : babbling) {
        // 변환할 발음 문자열을 순서대로 처리
        boolean valid = true;

        // 연속 발음 확인
        for (String can : speak) {
            // 발음이 두 번 연속으로 나타나는 경우
            String doubleCan = can + can;
            if (bab.contains(doubleCan)) {
                valid = false;
                break;
            }
        }

        if (valid) {
            // 발음을 모두 제거
            for (String can : speak) {
                bab = bab.replace(can, "");
            }

            // 최종적으로 빈 문자열인지 확인
            if (bab.isEmpty()) {
                cnt++;
            }
        }
    }

    return cnt;
}

}

2번 방식 :
import java.util.*;

class Solution {
public int solution(String[] babbling) {
int cnt = 0;
List speak = Arrays.asList("aya", "ye", "woo", "ma");

    for (String bab : babbling) {
        boolean valid = true;

        // 연속 발음 확인
        for (String can : speak) {
            String doubleCan = can + can;
            if (bab.contains(doubleCan)) {
                valid = false;
                break;
            }
        }

        if (valid) {
            // 발음을 모두 제거
            for (String can : speak) {
                bab = bab.replace(can, " ");
            }

            // 남은 문자열이 공백인지 확인
            bab = bab.replace(" ", "");
            if (bab.isEmpty()) {
                cnt++;
            }
        }
    }

    return cnt;
}

}

1번 방식은 안되는데 2번 방식은 왜 되는걸까요ㅠㅠ 전혀 모르겠네요

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.*;

class Solution {
    public int solution(String[] babbling) {
        int cnt = 0;
        List<String> speak = Arrays.asList("aya", "ye", "woo", "ma");

        for (String bab : babbling) {
            boolean valid = true;

            // 연속 발음 확인
            for (String can : speak) {
                String doubleCan = can + can;
                if (bab.contains(doubleCan)) {
                    valid = false;
                    break;
                }
            }

            if (valid) {
                // 발음을 모두 제거
                for (String can : speak) {
                    bab = bab.replace(can,"");
                }

                // 최종적으로 빈 문자열인지 확인
                if (bab.isEmpty()) {
                    cnt++;
                }
            }
        }

        return cnt;
    }
}

2 개의 답변
낙방여우

? 다른 부분이 없지 않나요? 둘다 안되는군요.

  • 박예서

    잘못 올렸네요! 수정했습니다.

    박예서―2024.07.26 17:03
낙방여우

공백을 두지 않으면 "yayae" 같은 경우가 발음이 가능하다고 판단되어 틀리는 거 같습니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.