[백준] 9012_괄호 (python) (다시 풀어보기)

juyeon·2022년 7월 4일
0

코딩테스트(python)

목록 보기
20/22

나의 풀이

1. 왜 실패했는지 모를... 오류는 안 나는데, 답이 틀림 ㅠ

n = int(input())
for i in range(n):
	parenthesis = input()
	while True:
		if not parenthesis:
			print('YES')
			break
		elif '()' in parenthesis:
			parenthesis.strip('()')
		else:
			print('NO')
			break

2. 역시나 시간초과

n = int(input())
for i in range(n):
    parenthesis = input()
    
    while 2 <= len(parenthesis): #문자열의 길이가 2 이상일 때
        #'()' 삭제를 반복
        parenthesis = parenthesis.replace('()', '')

if not parenthesis: #문자열이 비어있을 때
    print('YES')
else:
    print('NO')

: 다시 보니까, while 문에서 무한반복이 이루어지는 듯..

3. 예시는 성공. 그러나.. 시간초과! -> 오류 잡아내서 성공!

n = int(input())

for i in range(n):
	parenthesis = input()
    
	while True: #반복 하려구
		if '()' in parenthesis: #점차적으로 '()'을 삭제하도록
			parenthesis = parenthesis.replace('()', '')
            
        elif not parenthesis: #문자열이 비어있을 때
			print('YES')
			break
            
        #문자열이 비어있지도 않고 '()'가 있지도 않을 때
		else:
			print('NO')
			break

: 1번에서 왜 틀렸는지 알겠다..!
parenthesis.strip('()')에서 strip은 '()'을 통채로 삭제하는게 아니라, '(', ')'을 삭제하는 것이었다..!
-> 얼라 근데 다른 예시를 넣어보니 아니네..?
strip 함수는 더 공부해보고, 당분간은 replace를 대신 사용하자!

: parenthesis.replace('()', '')를 사용하니 깔끔!

-> parenthesis = parenthesis.replace('()', '')로 수정하니까 성공!
replace 해서 문자열 제거한 걸 다시 문자열로 저장해야는데, 안 했으니 무한반복이 일어난 것..!

4. 성공: 3번과 거의 유사한, 그러나 종료조건을 별도로 추가한

n = int(input())

for i in range(n):
	parenthesis = input()
	answer = True
    
	while answer == True: #반복 하려구
		if '()' in parenthesis: #점차적으로 '()'을 삭제하도록
			parenthesis = parenthesis.replace('()', '')
            
		elif not parenthesis: #문자열이 비어있을 때
			print('YES')
			answer = False
            
		else:
			print('NO')
			break
			answer = False

다른 사람 풀이

1. 합리적인(?) 숏코딩(변수명만 내껄로 바꿈)

for i in range(int(input())):
	parenthesis = input()
    
	for j in range(20):
		parenthesis = parenthesis.replace('()', '')
        
	print('NO' if parenthesis else'YES')

: range(20)은 뭘까? 오타일까? 왜 20이지?

2. 오 이렇게도 쓰는구나..숏코딩(변수명만 내껄로 바꿈)

for _ in[0] * int(input()):
	parenthesis = input()
    
	for z in parenthesis:
    	parenthesis = parenthesis.replace('()', '');
        
	print(parenthesis and 'NO' or 'YES')

: ;은 뭐지..? 파이썬에서도 세미콜론을 쓰는건가?!

3. 1등 숏코딩

exec(int(input())*("print('YNEOS'[''<input()"+".replace('()','')"*25+"::2]);"))

: 근데 1등 숏코딩들은 다 이해가 안간다;; 이렇게까지 짧게 해야하나..? 싶음..

4. 이건 또 뭐지..숏코딩(변수명만 내껄로 바꿈)

for _ in '_' * int(input()):
	parenthesis = input()
	for _ in parenthesis:
 		parenthesis = parenthesis.replace('()', '')
        
	print(['YES', 'NO'][parenthesis > ''])
profile
내 인생의 주연

0개의 댓글