[쇠막대기]-10799번
My answer
# 첫번째 제출(시간초과)
cnt,sums=0,0
tmp=input()
while("()" in tmp):
tmp=tmp.replace("()","L")
while('(' in tmp and ')' in tmp):
for i in range(len(tmp)):
if(tmp[i]=='('):
for j in range(i+1,len(tmp)):
if(tmp[j]=='('):
break
elif(tmp[j]==')'):
sums+=tmp[i:j+1].count('L')+1
tmp=tmp[:i]+'D'+tmp[i+1:]
tmp=tmp[:j]+'D'+tmp[j+1:]
break
print(tmp)
print(sums)
# 두번째 제출(시간초과)
sums=0
tmp=input()
for i in range(len(tmp)):
if(tmp[i]==')'):
for j in range(i-1,-1,-1):
if(tmp[j]=='('):
if(j==i-1):
tmp=tmp[:j]+'LL'+tmp[i+1:]
break
sums+=tmp[j:i+1].count('LL')+1
tmp=tmp[:j]+'D'+tmp[j+1:]
break
print(sums)
Another answer
arr = list(input())
bar = 0 #현재 짝대기 개수
cnt = 0 # 정답
i = 0
while 1:
if i==len(arr)-1: break
if arr[i]=='(':
if arr[i+1]==')':
cnt+=bar
i+=2
continue
bar+=1
cnt+=1
else:
bar-=1
i+=1
print(cnt)
더보기
내 코드는 답은 계속 맞았는데 시간초과가 떴다. 나는 문제 그대로를 풀려고 막대기도 문제 그대로 하고 그렇게 풀었는데 그러면 안되는 것 같다. 아래 코드를 보니 어떤 막대긴지 신경안쓰고 그냥 푼 것 같다. 글로 쓰려니 설명을 잘 못하겠다. + 엄청 시간을 헤맸는데, 파이썬은 for문에서 인자를 건들여도 다시 돌아가면 원래 인자로 초기화 된다고 한다;;; 이런 엄청난 걸 몰랐다니 C에서는 안그런데 파이썬만 그렇다고 한다. 이게 무슨 말이냐면 예를 들어 파이썬의 for문의 인자로 리스트의길이를 넣었을때. 반복문 내에서 길이를 바꿔줘도 for문은 맨처음 들어간 리스트의 길이대로 돌아간다는 것이다. 그래서 나는 저기 맨 마지막 코드의 while문을 for문으로 바꾼뒤 i를 인자로 넣어주고 밑에서 i+=2를 i+=1로 바꿔주고, i+=1은 없앴는데 계속 이상하게 나와서 보니 i는 맨처음 그냥 그대로 0~변화없이 증가한다.. 이건 몰랐으면 영원히 몰랐을거다. c에 익숙해진 난,,
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python/백준] #10808 - [알파벳 개수] (0) | 2021.12.01 |
---|---|
[Python/백준] #10866- [덱] (0) | 2021.12.01 |
[Python/백준] #10845- [큐] (0) | 2021.11.30 |
[Python/백준] #9012- [괄호] (0) | 2021.11.30 |
[Python/백준] #18870 - [좌표 압축] [try_again] (0) | 2021.11.30 |