[백준] 10799번 쇠막대기 - python 파이썬

2024. 10. 31. 22:37·코딩테스트/백준

문제

 

 

 

이 문제를 처음 봤을때는 쓸 수 있을 법한 알고리즘이 쉽게 생각나지는 않았다. 그나마 생각난게 스택 또는 큐를 활용하면 될려나 하는 생각만 들었다.

 

그래서 일단 주어진 예시대로 차근차근 계산해가면서 규칙을 찾아보았다.

 

 

 

이 예시를 기준으로 생각해보자

 

앞에 시작 부분은 막대기가 주어지지 않은채 () 레이저가 왔으므로 0

 

그다음에 ((( 이렇게 막대기가 3개가 오는 것을 알 수 있다. 그리고 그 후에 () 레이저가 와서 기존에 있던 3개의 막대기를 자른 다는 것을 알 수 있다.

 

그리고 또 레이저가 와서 현재 기준 3개인 막대기를 또 자른다 그러고 ) 가 와서 이 이후에는 막대기가 두개가 된다.

 

결론은 () 이렇게 오는 레이저 말고 ((( 이런식으로 여는 괄호만 올 때 =  막대기가 시작될 때 이므로 현재 좌표 기준 막대기의 개수를 저장해주면 된다.

 

그리고 닫는 괄호가 올 때는 막대기가 끝나면서 잘린 조각중 마지막 조각을 고려하여 +1을 해주면 된다

 

 

 

정리

 

1. '(' 여는 괄호만 올 때 = 현재 막대기 개수 + 1
2. ')' 닫는 괄호만 올 때 = 현재 막대기개수 -1 해주고, 정답에 +1 (잘린 조각중 마지막 조각 +1 해주어야하므로)
3. 레이저를 만나면 현재 막대기 개수만큼 더해줌 (현재 레이저 밑에 존재하는 막대기가 잘리므로)

 

 

레이저가 나오는 좌표의 왼쪽 기준으로 계산해주고 잘린 막대기의 마지막 조각의 카운트는 닫는 괄호가 왔을 때 더해주는 거라고 생각하면 된다.

 

 

코드

 

arr = list(input())

ans = 0
#현재 막대기 개수 저장하는 변수
now_stick = 0
for i in range(len(arr)):
    if arr[i] == '(':
        if i+1 < len(arr):
            #현재가 레이저라면
            if arr[i+1] ==')':
                #현재 저장된 막대기 개수만큼 잘렸으므로 정답에 플러스
                ans += now_stick
            else:
                #막대기가 하나 더 생긴거라면 막대기 개수 플러스 1
                now_stick+= 1
                
    elif arr[i] == ')':
        if i-1 >= 0:
            #레이저가 아닌 닫는 괄호가 온거라면
            if arr[i-1] !='(':
                #지금 끝나는 막대기의 마지막 조각을 정답에 +1
                ans += 1
                #막대기가 끝났으므로 현재 막대기 개수에서 -1
                now_stick -=1
print(ans)

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 2166번 다각형의 면적 - python 파이썬  (2) 2024.11.27
[백준] 9205번 맥주마시면서 걸어가기 - python 파이썬  (2) 2024.11.20
[백준]2467번 용액 - python파이썬  (2) 2024.10.23
[백준] 2589번 보물섬 - python 파이썬  (2) 2024.10.22
[백준] 16928번 뱀과 사다리게임 -python 파이썬  (3) 2024.10.22
'코딩테스트/백준' 카테고리의 다른 글
  • [백준] 2166번 다각형의 면적 - python 파이썬
  • [백준] 9205번 맥주마시면서 걸어가기 - python 파이썬
  • [백준]2467번 용액 - python파이썬
  • [백준] 2589번 보물섬 - python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IT기획
    다익스트라
    python
    BFS
    알고리즘
    AWS
    MSA
    EC2
    UnionFind
    프디아
    백준
    kdt교육
    알파코캠퍼스
    spring
    백엔드
    백트래킹
    프로디지털아카데미
    bastion host
    코테
    K디지털트레이닝
    깃허브
    신한투자증권
    Java
    github
    투포인터
    알파코
    파이썬
    코딩테스트
    그리디
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준] 10799번 쇠막대기 - python 파이썬
상단으로

티스토리툴바