2017-11-23 6 views
-1

이 질문은 hackerRank의 문제와 관련이 있습니다. - https://www.hackerrank.com/challenges/java-stack/problem어떤 차이가 있습니까?

루프를 넣을 때 어떤 차이가 있습니까?

루프 내부에 Stack을 넣으면 '[]'패턴에 대해 true를 반환하지만 클래스 수준에서 가져 오면 false 을 가져옵니다.

정답이 맞아야합니다.

import java.util.*; 
    class Solution{ 

     public static void main(String []argh) 
     { 
     Scanner sc = new Scanner(System.in); 


     while (sc.hasNextLine()) { 
     String input=sc.nextLine(); 
      Stack<Character> stack = new Stack<>(); 
      for(char c : input.toCharArray()){ 


       if(c == '{' || c == '(' || c =='['){ 
        stack.push(c); 
        continue; 
       } 

       if(c == '}' && !stack.isEmpty() && stack.peek() == '{'){ 
        stack.pop(); 
        continue; 
       } 

       if(c == ')' && !stack.isEmpty() && stack.peek() == '('){ 
        stack.pop(); 
        continue; 
       } 
       if(c == ']' && !stack.isEmpty() && stack.peek() == '['){ 
        stack.pop(); 
        continue; 
       } 

       if(c == '}' || c == ')'|| c == '['){ 
        stack.push(c); 
        break; 
       } 
    } //end for 
      System.out.println(stack.isEmpty()); 
      } //end while 



     } //end main 


    } //end class 
+0

while 루프 외부 스택 라인 - 대신 전체 텍스트 입력을 확인합니다 :

이 작업을 수행하는 또 다른 방법은 클래스 레벨의 스택을 추가하는 듯했으나 각 반복의 시작 clear를 호출하는 것입니다 by-lines. –

+0

오, 알았어 :) 고마워. –

답변

1

루프 내에서 while 루프의 모든 반복마다 새로운 스택이 만들어집니다. 클래스 레벨에 놓으면 프로그램 수명 동안 하나의 스택 만 생성됩니다.

입력란이 여러 개인 경우에만 차이가 있습니다. 당신은 단지 하나의 스택을 사용하는 경우

은, 그 스택이 가능하고, 입력의 이전 행에서 괄호도 포함됩니다 : 처음에는

{ 
false 
} 
true 

, 나는 {에 들어갔다. 균형이 맞지 않아 false입니다. 다음 줄에는 }을 입력했습니다. 균형을 맞추지 않아야하지만 출력은 true입니다. 이전 줄의 {이 아직 스택에 있기 때문입니다! 그래서 모든 줄마다 (루프 반복마다) 새로운 스택을 만들어야합니다.

while (sc.hasNextLine()) { 
     stack.clear(); // <---- 
     String input=sc.nextLine(); 
     for(char c : input.toCharArray()){ 
+0

감사합니다. –

+0

내 답변이 귀하의 질문에 대한 답변이라고 생각하시면 해당 체크 표시를 클릭하여 답변을 수락하십시오! @AankankshaSingh – Sweeper

관련 문제