파이썬 알고리즘 151번 | [백준 10799번] 쇠막대기 - 스택

Yunny.Log ·2022년 5월 17일
0

Algorithm

목록 보기
154/318
post-thumbnail

151. 큰 수 A+B

1) 어떤 전략(알고리즘)으로 해결?

2) 코딩 설명


내 괄호 (내 막대 사이) 안의 레이저 갯수 + 1 을 하면 답이 나오게 된다.

<내 풀이>


import sys

lis=[]
total=0
inp = list(sys.stdin.readline().rstrip())

for i in range(len(inp)):

    if inp[i]=="(" and inp[i+1]==")" : #레이저
        lis.append("l")

    elif inp[i]=="(" : #막대기 추가
        lis.append("(")

    elif inp[i]==")" and inp[i-1]!="(": 
    
    #")" 막대 끝나는 부분이면 계산해주기
   #단순 ) 면 안된다, 레이저 끝나는 부분도 포핰해서 세기 때문
   # 확실히 막대기일 때만 조건 봐주기
   
        for j in range(len(lis)-1, -1, -1):
            if lis[j]=="(":
                lis.pop(j) #pop을 안해주면 내 막대가 아닌 최신 막대기 세는 것;;
                total+=1
                break
            elif lis[j]=="l" :
                total+=1

print(total)

<내 틀렸던 풀이, 문제점>


import sys

lis=[]
total=0
inp = list(sys.stdin.readline().rstrip())

for i in range(len(inp)):
    print(lis)
    if inp[i]=="(" and inp[i+1]==")" : #레이저
        lis.append("l")

    elif inp[i]=="(" : #막대기 추가
        lis.append("(")

    else : 
    #")" 막대 끝나는 부분이면 계산해주기
        # lis.pop()
        # total+=lazer+1
        for j in range(len(lis)-1, -1, -1):
            if lis[j]=="(":
                break
            elif lis[j]=="l" :
                total+=1
print(total)

<반성 점>

  • 조건을 좀만 더 신중히 생각하기

<배운 점>

  • pop
  • 파이썬 join 활용예시

    '구분자'.join(리스트)

0개의 댓글