Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- deque
- 힙
- 임시 변수
- 매직 넘버
- 함수
- 가독성
- John Sonmez
- boolean
- 변수명
- 가이드
- max-heap
- 부등호
- 프로그래머스
- 조합
- 함수화
- 그리디
- 중간 변수
- ZIP
- permutations
- 커리어
- 대소 비교
- 코딩테스트
- 중첩
- 2020 채용
- 스택/큐
- 파이썬
- 중첩문
- 탈출 조건
- min heap
- enumerate
Archives
- Today
- Total
Better Code, Better Life
쇠막대기 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
쇠막대기가 중첩될 수록 조각이 많아진다.
"()"를 임의의 기호로 치환해 레이저 포인트를 지정해주자.
그리고 중첩되면 레이저 포인트로 생기는 쇠막대기 수를 증가시키고,
쇠막대기 끝에 도달하면 그 수를 감소시키자.
쇠막대기와 레이저의 표현이 "(" 와 ")"만으로 되어 있기 때문에 문제를 이해하는데 오래 걸렸다.
직접 구현 시, 이보다 더 나은 방식으로 추상화를 하자...
클린 코드 작성법
- 코드에는 매직 문자열, 매직 넘버가 없어야 좋다.
- 숫자 같은 경우 0과 1만이 적절하다. 이조차도 상수 이름을 지정하면 가독성이 올라간다.
- "(" 과 ")"에 적절한 이름을 붙여, 코드 이해도를 높이자.
- 뜻이 모호한 arrangement 를 bar_signs로 바꿔주자. 이해가 쉬워진다.
해답 코드
BAR_SIGN = "("
LASER_SIGN = ")"
LASER_POINT = "x"
def solution(arrangement):
bar_signs = arrangement
bar_signs = bar_signs.replace("()", LASER_POINT)
bar_count = 0
stacked_bar_num = 0
for sign in bar_signs:
if sign == BAR_SIGN:
bar_count += 1
stacked_bar_num += 1
if sign == LASER_SIGN:
stacked_bar_num -= 1
if sign == LASER_POINT:
bar_count += stacked_bar_num
return bar_count
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
코딩테스트 연습 - 쇠막대기 | 프로그래머스
여러 개의 쇠막대기를 레이저로 절단하려고 합니다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자릅니다. 쇠막대기와 레이저의 배치는 다음 조건을 만족합니다. - 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있습니다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓습니다. - 각 쇠막대기를 자르는 레이저는 적어도 하나 존재합니다. - 레이저는 어
programmers.co.kr
'Coding Test > Programmers' 카테고리의 다른 글
기능개발 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.01 |
---|---|
다리를 지나는 트럭 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.30 |
탑 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.26 |
프린터 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.24 |
베스트앨범 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.22 |
Comments