728x90
반응형

 

스택/큐 문제지만 내 방식대로 풀어보았다.

class Solution {
	    boolean solution(String s) {
	        boolean answer = true;
	        int tmp0 = 0; // '(' 일때 ++ ,  ')' 일때 -- 할 변수
	        if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
	        if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
	        
	        for(int i = 0; i<s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
		        char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
		        if(tmp0 == 0 && tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 "()))((()" 차단
		        if(tmp == '(')tmp0++;
		        if(tmp == ')')tmp0--;
	        }
	        
	        if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
	        
	        return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
	    }
	}

채점결과 모두 통과했다.

다른 사람의 풀이를 보자..

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}

이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.

나랑 비슷하지만, 좀더 깔끔한것 같다.

if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴

나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데

이는 효율성을 나름 생각해서 “()()()()()()()()()()()()(” 이런 경우에

끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..

다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)

아래는 스택을 이용한 방법인것 같다.

스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.

import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = "YES";
        Stack<Integer> st = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}

Stack 사용법

Stack<String> stack = new Stack<>();
	        stack.add("스택추가");
	        stack.push("스택추가");
	        String tmp = stack.pop();

스택 사용법은 push, pop만 알고 넘어가자.

stack.add()와 stack.push()의 차이점도 알게되었는데,

add() 의 리턴값은 boolean

push() 의 리턴값은 <E>이다.

즉, add()는 성공실패를 받고

push는 넣은값을 다시 리턴받는것이다.

스택/큐 문제지만 내 방식대로 풀어보았다.

class Solution {
	    boolean solution(String s) {
	        boolean answer = true;
	        int tmp0 = 0; // '(' 일때 ++ ,  ')' 일때 -- 할 변수
	        if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
	        if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
	        
	        for(int i = 0; i<s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
		        char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
		        if(tmp0 == 0 && tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 "()))((()" 차단
		        if(tmp == '(')tmp0++;
		        if(tmp == ')')tmp0--;
	        }
	        
	        if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
	        
	        return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
	    }
	}

채점결과 모두 통과했다.

다른 사람의 풀이를 보자..

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}

이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.

나랑 비슷하지만, 좀더 깔끔한것 같다.

if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴

나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데

이는 효율성을 나름 생각해서 “()()()()()()()()()()()()(” 이런 경우에

끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..

다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)

아래는 스택을 이용한 방법인것 같다.

스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.

import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = "YES";
        Stack<Integer> st = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}

Stack 사용법

Stack<String> stack = new Stack<>();
	        stack.add("스택추가");
	        stack.push("스택추가");
	        String tmp = stack.pop();

스택 사용법은 push, pop만 알고 넘어가자.

stack.add()와 stack.push()의 차이점도 알게되었는데,

add() 의 리턴값은 boolean

push() 의 리턴값은 <E>이다.

즉, add()는 성공실패를 받고

push는 넣은값을 다시 리턴받는것이다.

728x90
반응형

+ Recent posts