습관처럼
programmers [python] : 쇠막대기 본문
쇠막대기 문제:
레이저로 쇠막대기를 자를때 생성되는 쇠막대기의 총 개수를 출력하시오
접근 방법:
레이저 포인트의 위치를 리스트에 파악하고 자를때 현재 레이저 위치에 걸쳐있는 스택의 개수만큼 새로 생성된다.
def solution(arrangement):
answer = 0
pipe=[]
laser = 0
for idx,i in enumerate(arrangement):
if i == '(':
laser=1
pipe.append(i)
else:
if laser==1:
pipe.pop()
answer += len(pipe) #레이저로인해 잘린 앞의 쇠파이프 개수
laser=0 #레이저 포인트 체크
else:
pipe.pop() #파이프의 끝부분 제거
answer+=1 #파이프이 끝부분으로 인해 생성된 쇠파이프 개수 증가
return answer
다른 분들의 풀이중에서 replace를 활용한 코드가 더 한눈에 보기 쉽게 느껴져서 소개해드리겠습니다.
def solution(arrangement):
answer = 0
arrangement = arrangement.replace("()","L") #레이저의 포인트를 체크하지전에 미리 변경
stack = []
for idx, c in enumerate(arrangement):
if c == '(':
stack.append('(') #스텍추가
answer += 1 #쇠파이프가 생성에 따른 개수 추가
elif c == ')':
stack.pop() #쇠파이프의 꼬리 부분이 발견 pop
else:
answer += len(stack) #레이저로 인한 잘린 쇠파이프 길이 추가
return answer
저는 레이저로 인해 쇠파이프가 잘릴때 추가하고 쇠파이프의 꼬리부분을 발견하면 하나씩 추가하는 방식을 사용한 반면 위의 풀이는 쇠파이프의 해드부분이 발견시 추가하고 잘릴때 현존하는 쇠파이프의 개수만큼 다시 추가하는 방식을 사용했습니다.
Funny algorithm~
'Algorithms > programmers' 카테고리의 다른 글
programmers [python] : 2018 KAKAO BLIND RECRUITMENT 뉴스 클러스터링 (0) | 2019.12.23 |
---|---|
programmers [python] : 2020 KAKAO BLIND RECRUITMENT 문자열 압축 (0) | 2019.12.22 |
programmers [python] : 2020 KAKAO BLIND RECUITMENT 괄호 변환 (0) | 2019.12.21 |
programmers [python] : 주식가격 (0) | 2019.12.20 |
programmers [python] : 스킬트리 (0) | 2019.12.19 |