일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 대소 비교
- max-heap
- min heap
- 함수화
- 탈출 조건
- John Sonmez
- ZIP
- 중첩
- 함수
- boolean
- 임시 변수
- 그리디
- 중간 변수
- 파이썬
- 매직 넘버
- 스택/큐
- permutations
- 프로그래머스
- 조합
- 2020 채용
- enumerate
- 부등호
- 코딩테스트
- deque
- 변수명
- 힙
- 가이드
- 중첩문
- 커리어
- 가독성
- Today
- Total
목록스택/큐 (4)
Better Code, Better Life

문제 풀이 주어진 number 에서 순차적으로 각 숫자가 넣을만한 숫자인지 비교해봅니다. 앞으로 넣어야 할 숫자가 스택에 있는 마지막 숫자보다 크다면 마지막 숫자를 pop 해줍니다. 이 때 k(제거해야 할 숫자의 수)가 0보다 커야 합니다. 또한 스택이 비어있다면 넘어갑니다. 이 로직을 pop_until_condition 에 구현합니다. 1번에서 넣을만한 숫자는 다 candidates에 넣었습니다. 이제 k가 0이 될 때까지 숫자를 제거해주어야 합니다. pop_until_zero candidates 안의 숫자들을 하나의 문자열로 합치면 정답을 구할 수 있습니다. 클린 코드 작성법 stack 과 같은 자료구조를 명시하는 변수명 대신 candidates 처럼 구체적으로 변수가 의미하는 바가 드러나게 변수명을..

문제 풀이 쇠막대기가 중첩될 수록 조각이 많아진다. "()"를 임의의 기호로 치환해 레이저 포인트를 지정해주자. 그리고 중첩되면 레이저 포인트로 생기는 쇠막대기 수를 증가시키고, 쇠막대기 끝에 도달하면 그 수를 감소시키자. 쇠막대기와 레이저의 표현이 "(" 와 ")"만으로 되어 있기 때문에 문제를 이해하는데 오래 걸렸다. 직접 구현 시, 이보다 더 나은 방식으로 추상화를 하자... 클린 코드 작성법 코드에는 매직 문자열, 매직 넘버가 없어야 좋다. 숫자 같은 경우 0과 1만이 적절하다. 이조차도 상수 이름을 지정하면 가독성이 올라간다. "(" 과 ")"에 적절한 이름을 붙여, 코드 이해도를 높이자. 뜻이 모호한 arrangement 를 bar_signs로 바꿔주자. 이해가 쉬워진다. 해답 코드 BAR_S..

문제 풀이 이 문제는 데이터가 무슨 의미인지, 그리고 이를 어떻게 처리하는지 생각하는데 도움이 된다 (추상화라고 한다). 주어진 것은 heights 즉 타워의 높이로 이루어진 리스트다. 손으로 송신 탑이 신호를 보낼 때, 어떤 탑이 수신하는지 계산해보자. 그리고 이를 모듈화 해보자. 송신탑 하나 하나 오른쪽부터 수신탑의 index를 계산해내면 된다. 오른쪽부터 구했기 때문에 다시 거꾸로 한다. reversed_heights 의 경우 copy의 deepcopy를 이용했는데 리스트를 reverse하게 된다면 함수 바깥 참조하고 있던 리스트도 reverse 되게 된다. 이 부분은 한번 deepcopy 없이 실험해보는 것도 좋다. 실험을 통해 함수가 어떻게 데이터를 참조하고 있는지 배워보자. 파이썬 얕은 복사,..

문제 풀이 먼저 기존의 인덱스가 몇번째 순서로 프린트 되는지 알아내야 하기 때문에 기존 인덱스를 묶어 저장합니다. 파이썬 리스트는 첫번째 원소를 빼낼 때(pop) 비용이 많이 듭니다. 따라서 이를 queue 자료 구조인 collections 의 deque를 이용합니다. 아래 링크를 보면 deque의 시간복잡도를 알 수 있습니다. 그 다음부터는 출력물이 어떤 순서로 뽑히는지 알아내는 로직을 세웁니다. 프린터 출력물 상단부터 제일 우선순위가 높은지 확인합니다. max_priority = get_max_priority(indexed_priority_deque) 맞으면 출력순서 리스트(print_order_list)에 저장합니다. 아니면 출력물 하단에 삽입합니다. 마지막으로 목표 출력물인 location이 몇 ..