본문 바로가기
공부/2024 항해99코딩클럽

99클럽 코테 스터디 4일차 TIL + 스택/프로그래머스 [올바른 괄호]

by 푸딩코딩 2024. 5. 23.
728x90
반응형

 

 

1. 오늘의 학습 키워드


 

스택

 

 

2. 오늘의 학습 문제 


문제


https://school.programmers.co.kr/learn/courses/30/lessons/12909/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

코드


import java.util.Stack; //스택 라이브러리 

class Solution {
    boolean solution(String s) {
        boolean answer = false;

        Stack<Character> stack = new Stack<>(); //주어진 s의 문자를 담을 빈 스택 생성.
        
        // stack에 차례대로 삽입하여 알맞은 '()'꼴이 생기면 pop하기. for문을 모두 통과했을 때 stack이 empty면 올바른 문장
        for( int i=0;i<s.length() ; i++){ //String에 대하여 한 문자씩 접근
            
            if(stack.isEmpty()== true && s.charAt(i) == ')') //스택이 비어있는데 ) 가 push되면 틀린 문장
                return answer;
            if(stack.isEmpty()!= true && stack.peek()=='(' && s.charAt(i)==')'){ 
                //스택이 비어져 있지 않고, 스택의 top과 s.charAt[i]가 알맞은 괄호 짝이면 스택 top을 pop
                stack.pop();
            }
            else 
                stack.push(s.charAt(i));//스택에 push
            
        }
        
        if(stack.isEmpty()==true) //스택이 비어있는지 검사. 
            answer=true;
        
        return answer;
    }
}

 

 

어떻게 풀지 생각하다 괄호가 올바르게 짝지어져야한다면, 빈 스택을 생성하여 문자열의 문자에 접근하며 스택에 push하고, 스택의 top과 현재 push할 괄호가 () 꼴로 알맞은 모양이면 pop하여, 최종적으로 스택이 비어있으면 true를 반환하면 되겠다고 생각했다.

1. 만약 스택이 비어있을때 )가 먼저 삽입되면 바로 틀린 문장이므로 return answer한다. 

2. 스택이 비어져있지 않고, stack.peek()=='('이고 push할 s.charAt(i) ==')'이면 stack.pop()하여 스택의 top을 지운다.

3. 그렇지 않다면 그냥 s.charAt(i)를 스택에 push한다

 

for문을 다 돌았을때, stack이 비어져있다면 올바른 문장이 된다. 

 

 

3. 오늘의 회고


 

스택을 이용해 풀어보았다. peek와 pop의 개념과 

JAVA에서 string의 문자에 접근하려면 charAt()를 통해 접근해야함을 배웠다. 

 

 

+왠지 발표하고 싶어서 발표 세션을 진행해보았는데, 클럽장님 피드백 시간에서 early return (함수에서 조건문을 만족할 때 빨리 리턴하는 것) 개념을 알게 되었다. (return 함수 꼴)

그리고 작성한 코드에 if나 else if 와 같은 조건문을 많이 사용했는데, 가독성을 고려하는 것이 좋을 것 같다는 피드백을 들었다. 코드 리팩토링을 통해 깔끔하게 로직을 짜는 것을 연습해보자! ! 

728x90
반응형