-
[Python] BOJ 4949 : 균형잡힌 세상코딩테스트/백준 2024. 10. 22. 08:31
https://www.acmicpc.net/problem/4949
생각 정리
- 스택을 사용하고, ')' or ']' 가 들어올 때 스택의 맨 위의 문자가 각각의 짝과 맞는지 보자.
- 그런 다음 만약 stack이 비어있다면..
헷갈렸던 부분
- 문자열의 마지막에 온점이 찍힌다. 문자열의 종료 조건인데 어떻게 가능하지
- 쉽게 말해 문자열이 있다면 온점을 신경 쓰지 않아도 된다. 그냥 없다고 생각하자.
- 다만, 문자 '.' 만 입력으로 들어왔을 때, 반복문을 종료하면 된다.
요구사항
- 시간제한 : 1초 문자열의 길이가 100보다 작거나 같다.
- 메모리 제한 128MB 넉넉
- 문자열이 주어졌을 때 균형 잡힌 문자열인지 아닌지 판단
- 문자열의 종료 조건은 마지막에 온점 하나가 들어온다.
설계
- while True일 때 동안 사용자로 부터 입력을 받는다.
- 만약 받은 입력이 '.' 이라면 while문을 break 한다.
- 아닌 경우 is_balanced(line) 사용자 정의 함수를 만들어 입력 받은 (line) 걸 돌린다.
- True 일 경우 print('yes')
- False 일 경우 print('no)
- def is_balanced(s):
- 리스트 초기화 (입력 받은 문자들 중 괄호들만 넣을 리스트)
- for 문을 돌린다. for char in s: (여기서 문자열은 이터럴이기 때문에 for문이 가능하다.)
- 만약 char == '(' 나 '[' 이라면
- 리스트.append(char)
- 그게 아니고 char == ')' 라면
- 리스트가 비어 있고, 스택의 마지막 인덱스의 값이 '(' 아니면
- retun False
- 리스트.pop() (리스트가 비어 있지 않고, 스택의 마지막 인덱스의 값이 '[' 라면
- 리스트가 비어 있고, 스택의 마지막 인덱스의 값이 '(' 아니면
- 만약 char == '(' 나 '[' 이라면
. . . .
다른 부분도 위 과정처럼 처리를 해준다.
구현
def is_balanced(s): stack = [] for char in s: if char == '(' or char == '[': stack.append(char) elif char == ')': if not stack or stack[-1] != '(': return False stack.pop() elif char == ']': if not stack or stack[-1] != '[': return False stack.pop() return len(stack) == 0 while True: line = input().rstrip() if line == '.': break if is_balanced(line): print("yes") else: print("no")
+ 2024.10.23 복습
def is_balanced(s): stack = [] for char in s: if char == "(" or char == "[": stack.append(char) elif char == ")": if not stack or stack[-1] != '(': return False stack.pop() elif char == "]": if not stack or stack[-1] != '[': return False stack.pop() return len(stack) == 0 while True: text = input().rstrip() if text == '.': break if is_balanced: print("yes") else: print("no")
- 맞게 한 거 같았는 데 원하는 출력 결과가 나오지 않아.. 보다가 모르겠어서 gpt 한테 물어봄.
- while 문에서 is_balanced라는 사용자 정의 함수를 만들었는 데 인자를 안넣어주었다.
- if문에서 0과 False 를 제외하고 다 True를 반환하기 때문에 yes가 나온 것이다. <- 뇌피셜
- 그래서 if is_balaced(text): 라고 수정하여 원하는 출력 결과를 얻을 수 있었다.
'코딩테스트 > 백준' 카테고리의 다른 글
[Python] BOJ 10799 : 쇠막대기 (0) 2024.10.24 [Python] BOJ 3986 : 좋은 단어 (2) 2024.10.23 [Python] BOJ 10845 큐 (0) 2024.10.21 [Python] BOJ 17298 : 오큰수 (0) 2024.10.19 [Python] BOJ 1158 : 요세푸스 문제 (0) 2024.10.17