Notice
Recent Posts
Link
- Today
- Total
hye-log
[프로그래머스]올바른 괄호(Python) 본문
0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
1) 주어진 문자열에서 왼쪽 괄호와 오른쪽 괄호의 짝이 맞는지 확인
2. 입출력
# input
s = "()()"
# output
answer = True
3. 코드
1) 첫 번째 코드
순수하게 문제의 조건에 맞게 왼쪽 괄호와 오른쪽 괄호를 stack에 append, pop 하는 방식
def solution(s):
stack = []
for i in range(len(s)):
if s[i] == '(': # 왼쪽 괄호이면
stack.append('(') # 스택에 추가
else: # 오른쪽 괄호이면(문제에서 문자열은 괄호 2종류만 나옴)
if not stack: # 스택이 비어 있으면
return False # pop 할 괄호가 없으므로 return False
else: # 스택이 있으면
stack.pop() # pop
return True if not stack else False # 스택이 비어 있으면 return True, 스택이 있으면 닫히지 않았으므로 False
실행 결과
정확성 테스트 면에서 시간 효율이 좋음
2) 두 번째 코드
문자열은 왼쪽 괄호나 오른쪽 괄호만 나오므로 check 변수의 integer value를 이용하는 방식
def solution(s):
check = 0
for i in range(len(s)):
if s[i] == '(': # 왼쪽 괄호이면
check += 1 # check에 1 증가
else:
if check < 1: # check가 1보다 작으면(왼쪽 괄호가 등장하기 전)
return False # 왼쪽 괄호가 없으므로 return False
else: # check가 양수이면
check -= 1 # check에 1 감소
return True if check == 0 else False # check가 0이면 return True, 값이 있으면 False
실행 결과
정확성 테스트 면에서 두 번째 코드보다 시간이 걸리지만, 효율성 테스트에서 우수함
4. 알게된 점
1) stack의 append, pop
stack = []
stack.append('a') # stack에 요소 추가
print(stack)
>> ['a']
stack.pop() # stack에 요소 빼기
print(stack)
>> []
5. Github
https://github.com/iihye/Algorithm/blob/main/Programmers/find_parenthesis.py
GitHub - iihye/Algorithm
Contribute to iihye/Algorithm development by creating an account on GitHub.
github.com
728x90
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스]공 이동 시뮬레이션(Python) (0) | 2022.09.22 |
---|---|
[프로그래머스]숫자의 표현(Python) (0) | 2022.09.18 |
[프로그래머스]최솟값 만들기(Python) (0) | 2022.09.16 |
[프로그래머스]JadenCase 문자열 만들기(Python) (0) | 2022.09.15 |
[프로그래머스]최댓값과 최솟값(Python) (0) | 2022.09.14 |
Comments