[프로그래머스 / Level 2] 올바른 괄호 (파이썬)

2022. 9. 17. 18:34·🎲 알고리즘 공부/프로그래머스

[문제]

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

 

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예시

 

 

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

 

프로그래머스

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

programmers.co.kr


🎨 풀이

💡 전체 코드

def solution(s):
    answer = True
    stack = []
    
    for i in range(len(s)):
        if s[i] == "(":
            stack.append("(")
        else:
            if len(stack) != 0:
                if stack[-1] == "(":
                    stack.pop()
                else :
                    stack.append(")")
            else :
                stack.append(")")                
    
    if len(stack) != 0 :
        answer = False
    
    return answer

> 핵심 : "(" , ")"가 만나려고 할 때 pop 해주고, 나중에 stack에 남은 게 있는 지 확인하기!

 

 

 

🍦 코드 설명 (실행 순서대로 나열)

#solution

    answer = True
    stack = []

1. 변수와 스택를 초기화한다.

 - answer : 정답

 - stack : "(" 또는 ")" 가 들어올 공간

   - "(" , ")" 개수가 맞더라도 순서에 따라 올바른 괄호 / 틀린 괄호가 될 수 있기 때문에 스택 활용했음!

 

 

 

#solution - 인형 집어 올리기 & 비교해주기

    for i in range(len(s)):
        if s[i] == "(":
            stack.append("(")
        else:
            if len(stack) != 0:
                if stack[-1] == "(":
                    stack.pop()
                else :
                    stack.append(")")
            else :
                stack.append(")")

2. [s[i]가 "(" 라면] stack에 그대로 append 해준다.

3. [s[i]가 ")" 라면] 먼저 stack이 비어있는 지 확인한다.

4. [s[i] == ")" & stack이 비어있지 않은 경우] stack의 맨 끝에 있는 문자가 "("인지 확인한다.

  만약, stack 맨 끝의 문자가 "("라면 pop을 해준다. 아니라면 ")"을 append 해준다.

5. [s[i] == ")" & stack이 비어있는 경우] stack에 ")"를 append 해준다.

 

 

    if len(stack) != 0 :
        answer = False
    
    return answer

6. stack이 비어있지 않다면 answer을 False로 바꾼다.

7. answer을 return 한다.


끝~

⭐ 느낀점

> 예전에 백준에서 풀어본 문제랑 같은 유형이라 잘 푼 것 같다. 하하. 이제 좀 어려운 문제들 위주로 풀어봐야하나 싶긴 하다잉. 파이팅해보자!

저작자표시 (새창열림)

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / Level 2] 숫자의 표현 (파이썬)  (0) 2022.09.19
[프로그래머스 / Level 2] 다음 큰 숫자 (파이썬)  (0) 2022.09.18
[프로그래머스 / Level 1] 크레인 인형뽑기 게임 (파이썬)  (0) 2022.09.16
[프로그래머스 / Level 1] 성격 유형 검사하기 (파이썬)  (0) 2022.09.15
[프로그래머스 / Level 2] 이진 변환 반복하기 (파이썬)  (0) 2022.09.14
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / Level 2] 숫자의 표현 (파이썬)
  • [프로그래머스 / Level 2] 다음 큰 숫자 (파이썬)
  • [프로그래머스 / Level 1] 크레인 인형뽑기 게임 (파이썬)
  • [프로그래머스 / Level 1] 성격 유형 검사하기 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    피보나치수
    코테
    코드업
    오블완
    BOJ
    nodejs
    6월 목표
    til
    연습문제
    스프링 부트
    정처기
    폰켓몬
    일기
    찬양추천
    codeup
    행렬덧셈
    카카오
    백준
    프로그래머스
    충무로
    신입일기
    코린이
    컨텐더스
    오버워치
    50문답
    정보처리기사
    스프링부트
    파이썬
    코민이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 2] 올바른 괄호 (파이썬)
상단으로

티스토리툴바