[프로그래머스] 올바른 괄호

Muhly·2023년 11월 29일
0

코딩테스트 준비

목록 보기
1/4

문제

문제접근

1️⃣ 문제 풀이

문자열이 올바르게 열리고 닫힌 괄호(’(’ , ’)’)로만 구성되어 있는지 확인하는 코드가 필요하다.

2️⃣ 메소드 정의

  public static void main(String[] args) {
        Solution T = new Solution();
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        System.out.println(T.solution(s));
    }
boolean solution(String s){
	...
}

solution 메소드는 문자열 ‘s’를 입력으로 받고, 괄호가 올바르게 열리고 닫혔는지를 나타내는

boolean answer를 반환한다. 만약 올바르다면 true, 올바르지않다면 false가 반환될 것이다.

3️⃣ 스택 사용하기

Stack<Character> stack = new Stack<>();

Stack를 사용하여 괄호의 순서를 추적한다.

스택

스택은 “쌓다”라는 의미로 데이터를 차곡차곡 쌓아 올린 형태의 자료구조다. Last-In FirstOut 이란 의미로 LIFO라 불리며 후입선출이라고한다. 웹 브라우저의 “뒤로가기”를 생각하면된다.

스택타입

stack()비어 있는 새로운 스택을 만든다.
is Empty()스택이 비어있으면 true, 아니면 false를 반환
push(i)input을 스택의 맨 위에 추가한다.
pop()스택의 맨 위에 있는 항목을 꺼내어 반환한다.
peek()스택의 맨 위에 있는 항목을 삭제하지 않고 반환한다.
size()스택내의 모든 항목들의 개수를 반환한다.
clear()스택을 공백상태로 만든다.

4️⃣ 문자열 순회 및 처리

    for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            //여는 괄호일때
            if(c=='('){
                stack.push(c);
            }

            //닫는 괄호일떼

            else if(c ==')'){
                if(stack.isEmpty()){
                    return false;
                }
                stack.pop();
            }
            stack.pop();
        }

s를 받아온 후 배열을 돌리며 charAt(i)를 검사한다. (s의 i번째 문자를 반환하는 함수로 char c 에 담아준다.)

그 후 “여는 괄호일때”

//c가  ‘(’ 라면  스택에 c 를 push 해준다
stack.push(c); 

“닫는 괄호일때”

//c가  ‘)’ 라면  스택에 c 를 pop 해준다
 stack.pop();
💡 그전에 else if(c ==')'){ →현재 문자가 닫는 괄호일 경우 if(stack.isEmpty()){→**스택이 비어있는지 검사한다.유효성 검사** return false; →stack.isEmpty ==true라는 뜻인데 만약 비어있다면 false 반환 } stack.pop();→아니라면 pop호출 }

5️⃣ 최종 검사

 if(!stack.isEmpty()){
            answer = false;
        }
        return answer;
    }

stackstack 의 유효성을 최종적으로 판단하는 것이다.

코드

import java.util.Scanner;
import java.util.Stack;

public class Solution {

    boolean solution(String s){
        boolean answer = true;
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            //여는 괄호일때
            if(c=='('){
                stack.push(c);
            }

            //닫는 괄호일떼

            else if(c ==')'){
                if(stack.isEmpty()){
                    return false;
                }
                stack.pop();
            }
            stack.pop();
        }
        if(!stack.isEmpty()){
            answer = false;
        }
        return answer;
    }

    public static void main(String[] args) {
        Solution T = new Solution();
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        System.out.println(T.solution(s));
    }

}

문제접근

1️⃣ 문제 풀이

문자열이 올바르게 열리고 닫힌 괄호(’(’ , ’)’)로만 구성되어 있는지 확인하는 코드가 필요하다.

2️⃣ 메소드 정의

  public static void main(String[] args) {
        Solution T = new Solution();
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        System.out.println(T.solution(s));
    }
boolean solution(String s){
	...
}

solution 메소드는 문자열 ‘s’를 입력으로 받고, 괄호가 올바르게 열리고 닫혔는지를 나타내는

boolean answer를 반환한다. 만약 올바르다면 true, 올바르지않다면 false가 반환될 것이다.

3️⃣ 스택 사용하기

Stack<Character> stack = new Stack<>();

Stack를 사용하여 괄호의 순서를 추적한다.

스택

스택은 “쌓다”라는 의미로 데이터를 차곡차곡 쌓아 올린 형태의 자료구조다. Last-In FirstOut 이란 의미로 LIFO라 불리며 후입선출이라고한다. 웹 브라우저의 “뒤로가기”를 생각하면된다.

스택타입

stack()비어 있는 새로운 스택을 만든다.
is Empty()스택이 비어있으면 true, 아니면 false를 반환
push(i)input을 스택의 맨 위에 추가한다.
pop()스택의 맨 위에 있는 항목을 꺼내어 반환한다.
peek()스택의 맨 위에 있는 항목을 삭제하지 않고 반환한다.
size()스택내의 모든 항목들의 개수를 반환한다.
clear()스택을 공백상태로 만든다.

4️⃣ 문자열 순회 및 처리

    for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            //여는 괄호일때
            if(c=='('){
                stack.push(c);
            }

            //닫는 괄호일떼

            else if(c ==')'){
                if(stack.isEmpty()){
                    return false;
                }
                stack.pop();
            }
            stack.pop();
        }

s를 받아온 후 배열을 돌리며 charAt(i)를 검사한다. (s의 i번째 문자를 반환하는 함수로 char c 에 담아준다.)

그 후 “여는 괄호일때”

//c가  ‘(’ 라면  스택에 c 를 push 해준다
stack.push(c); 

“닫는 괄호일때”

//c가  ‘)’ 라면  스택에 c 를 pop 해준다
 stack.pop();
💡 그전에 else if(c ==')'){ →현재 문자가 닫는 괄호일 경우 if(stack.isEmpty()){→**스택이 비어있는지 검사한다.유효성 검사** return false; →stack.isEmpty ==true라는 뜻인데 만약 비어있다면 false 반환 } stack.pop();→아니라면 pop호출 }

5️⃣ 최종 검사

 if(!stack.isEmpty()){
            answer = false;
        }
        return answer;
    }

stackstack 의 유효성을 최종적으로 판단하는 것이다.

코드

import java.util.Scanner;
import java.util.Stack;

public class Solution {

    boolean solution(String s){
        boolean answer = true;
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            //여는 괄호일때
            if(c=='('){
                stack.push(c);
            }

            //닫는 괄호일떼

            else if(c ==')'){
                if(stack.isEmpty()){
                    return false;
                }
                stack.pop();
            }
            stack.pop();
        }
        if(!stack.isEmpty()){
            answer = false;
        }
        return answer;
    }

    public static void main(String[] args) {
        Solution T = new Solution();
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        System.out.println(T.solution(s));
    }

}
profile
https://muhlysstudynote.tistory.com/-> 블로그 이전하였습니다

0개의 댓글