| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- Java
- DP
- 정렬
- 1932
- 알고리즘고득점Kit
- 완전탐색
- Python
- 깃허브
- 15686
- 그래프
- 프로그래멋
- 백준
- 토마토
- 알고리즘
- 월간 코드 챌린지 시즌1
- 자바
- Summer/Winter Coding(~2018)
- Lv2
- 프로그래머스
- 이코테
- 구현
- 분할정복
- BFS
- 그래프탐색
- 정수 삼각형
- dfs
- 깃허브 프로필
- 다익스트라
- 조합
- GIT
- Today
- Total
갱스터하우스
[Python] Lv2.올바른 괄호 본문
https://programmers.co.kr/learn/courses/30/lessons/12909
코딩테스트 연습 - 올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은
programmers.co.kr
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
| s | answer |
| "()()" | true |
| "(())()" | true |
| ")()(" | false |
| "(()(" | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
나의 접근방법 및 풀이
처음에 문제를 보고 그럼 '('랑 ')'의 개수가 같아야 True 아닌가? 생각으로 아래의 코드처럼 실행했지만, 여기서 중요한 점을 빼먹었었다. 바로 '올바른 괄호'이다. 문제 설명에서
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
라고 명시되어있는 것 처럼 둘의 숫가 같더라도 올바른 맺음관계가 아니므로, 이는 False이다.
def solution(s):
answer = True
cnt = 0
for i in s:
if i == '(':
cnt += 1
else:
cnt -=1
if cnt == 0:
return True
else:
return False
다른 사람들의 풀이에서 pop()을 가져와 적용해봤다.
올바르지 않은 괄호를 판단하는 건 크게 두가지이다.
(1) 처음부터 ')'가 나오는 경우 : ')()('
(2) 맞는 것 같은듯하다 아닌 경우: '((())('
먼저, (1)은 바로 거를 수 가 있다.
→ i가 ')'가 나온 상태에서 tmp가 빈 리스트라면 짝이없는 괄호이기때문에 False!
(2)의 경우에는 pop을 이용해서 최종적으로 판단해야 한다.
→ 만약 빈리스트가 아니라면 tmp에서 pop하면 된다. Why? → tmp에는 ')'만 추가되기 때문이다.
for()문 종료 후, tmp가 빈 리스트라면 짝을 다 찾아갔기 때문에 True, 아니라면 짝이 안 맞기때문에 False
def solution(s):
answer = True
tmp = []
for i in s:
if i == '(':
tmp.append(i)
else: #')'
if tmp == []:
return False
else:
tmp.pop() ## 마지막 요소 꺼내
if tmp == []:
return True
else:
return False
다른 풀이
오...아직 이 단계까지 가려면 멀었다!
def is_pair(s):
# 함수를 완성하세요
x = 0
for w in s:
if x < 0:
break
x = x+1 if w=="(" else x-1 if w==")" else x
return x==0'코테 문제 > 프로그래머스' 카테고리의 다른 글
| [Python] Lv2.H-Index (0) | 2022.05.15 |
|---|---|
| [Python] Lv2. 스킬트리 (0) | 2022.05.03 |
| [Python] Lv2.최댓값과 최솟값 (0) | 2022.04.30 |
| [Python] Lv2. 피보나치수 (0) | 2022.04.30 |
| [Python] Lv1.최소직사각형 (0) | 2022.04.19 |