강의로 돌아가기
알파카

테스트 케이스 3~5 질문

스택을 이용해서 풀었는데 혹시 어떤 부분이 문제인지 알 수 있을까요?

작성중인 코드―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
import java.util.*;
class Solution
{
    public int solution(String s)
    {
        Stack<Character> list = new Stack<>();
        int cnt = 0;
        for(int i=0;i<s.length();i++){
            if(!list.contains(s.charAt(i))) {
                list.add(s.charAt(i));
                cnt++;
            }
            else {
                if(list.peek()==s.charAt(i)){
                    list.pop();
                    cnt--;
                }
                else {
                    return 0;
                }
            }
            if(cnt<0) {
                return 0;
            }
        }
        if(cnt!=0) return 0;

        return 1;
    }
}
2 개의 답변
SoftVanilla

abccaeeaba

스택에 'a'가 남아있는데 또 다시 'a'가 들어왔다고 해서, 'a'가 지워지지 않는다는 보장은 없습니다.

김민지
  1. 14번줄에서 list.peek() != s.charAt(i) 이렇다면 19번줄에서 바로 return 0하는 것이 문제인것 같습니다.
    다음 for문으로 넘어가야지 return 0해버리면 s의 뒤 문자열을 판단할 수 없습니다.

  2. cnt로 수를 세다보니 ++ --하면서 음수가 되면 return 0하는 부분도 문제인 것 같습니다.
    for문을 한 번 돌고 맨 마지막에 if(list.isEmpty()) -> return 1 아니라면 return 0 하면 됩니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.