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

문제 풀이 빈 큐를 만듭니다. 그리고 동작들을 차례차례 수행합니다. 이 때 max를 구하는 경우 linear하게 구하고 min을 구하는 경우 heap 구조(log n)를 이용합니다. 이 문제는 min 구할 때 heap 구조 없이 해도 풀리네요... 클린 코드 작성법 매직 넘버의 경우, 적절한 상수명을 붙여 관리합니다. MAX_KEY MIN_KEY operations 같은 경우, 여러 동작으로 나누어집니다. 이를 각각 관리해줍니다. process 리스트가 비어있는지 확인할 때 함수를 통해 가독성을 높여줍니다. is_empty 해답 코드 import heapq MAX_KEY = 1 MIN_KEY = -1 def solution(operations): number_list = [] for operation i..

문제 풀이 라면 공장과 유사한 문제 같습니다. 라면 공장에서는 기준점보다 커야만 밀가루를 공급받을 수 있습니다. 디스크 컨트롤러에서는 요청 시간이 현재 시간 이전이어야 작업을 수행할 수 있습니다. 풀이 과정 먼저 min heap을 만들어 줍니다. 이 때 heapq 를 이용하기 위해 자료를 가공해줍니다. swap_index heapq.heapify 작업을 모두 처리할 때까지 아래를 반복합니다. 처리할 수 있는 작업을 찾습니다. 만약 찾지 못하면 기다립니다. get_job get_minimal_wait_time 평균 대기 시간을 구합니다. 클린 코드 작성법 문제를 해결하기 위한 중간 변수를 만듭니다. 이 때 문제를 잘 이해할 수 있게 변수명을 지어줍니다. current_time total_wait_t..

문제 풀이 최대한 밀가루를 많이 공급해주는 해외 공장을 찾아야 합니다. 하지만 그 날까지 밀가루가 충분히 있어야 합니다. 버틸 수 있는 날 중에서 위 조건의 해외 공장을 찾아줍시다. 위 과정을 목표 수량에 달성할 때까지 반복합니다. 위 조건의 해외 공장을 찾으려면 max-heap 구조를 이용해야 합니다. 파이썬의 heapq 모듈은 기본적으로 min-heap이기 때문에 자료 값에 -1를 곱해주면 max-heap처럼 다룰 수 있습니다. 이후 최소값을 뽑으면 사실상 최대값이 뽑힙니다. 자료를 직접 다룰 때는 다시 -1를 곱해줍니다. ... supplies = flip(supplies) ... supply = supply_info[0]*(-1) 파이썬 heapq 모듈의 사용법은 help 키워드나 여기 링크를 참..

문제 풀이 제일 안 매운 두 음식을 뽑아서 섞습니다. 이 프로세스를 모든 음식이 일정 기준(K)을 넘을 때까지 반복합니다. 만약 위의 방법이 실패하면 -1이 답입니다. 제일 안 매운 음식을 반복적으로 추출해야 하기 때문에 힙 구조를 이용해야 합니다. 학교에서는 주로 max-heap 을 배웠을텐데 여기서는 min 값을 지속적으로 이용해야 하기 때문에 min-heap을 이용합니다. 파이썬의 heapq 모듈은 기본적으로 min-heap입니다. 사용법은 help 키워드나 여기 링크를 참조하세요! 클린 코드 작성법 이번 문제는 클린 코드를 작성하기가 힘들었습니다. 실력자분이 나타나서 한 수 가르쳐줬으면 합니다. check_conditions을 통해 break를 하나만 씁니다. 탈출 조건이 하나여야 while문을 ..

문제 풀이 prices의 왼쪽 price 부터 반복적으로 가격이 떨어지지 않은 기간을 구합니다. 적절히 get_non_decreasing_days 함수만을 구현하면 됩니다. deque 자료구조를 통해 첫 번째 원소를 추출해내는 작업을 수월하게 할 수 있습니다. 프린터 문제 해설 에서 deque 설명을 참조하세요! 클린 코드 작성법 함수의 이름으로 동사를 이용합니다. get_non_decreasing_days 변수명을 실제 문제와 대응되게 짓습니다. non_decreasing_days for 문에서의 임시 변수 또한 i, j 보다 반복 대상을 잘 나타낼 수 있는 이름을 짓습니다. other_price 해답 코드 from collections import deque def get_non_decreasing_..

문제 풀이 작업은 하루가 지나면 다 같이 업데이트 되고 100 이상이 되더라도 앞의 작업이 끝나지 않으면 배포가 되지 않습니다. 첫 번째 작업이 완료될 때까지 작업을 진행합니다. complete_first_progress 첫 번째 작업이 완료되면 첫번째부터 100 이상인 작업들을 배포합니다. update_progress_info 배포된 작업의 수를 저장합니다. complete_group_num.append(len(finished_progresses)) 작업이 모두 배포될 때까지 1~3을 반복합니다. update_progress_info에서 왼쪽 element를 반복적으로 빼야하기 때문에 list보다 deque를 이용합니다. deque 자료구조를 통해 첫 번째 원소를 추출해내는 작업을 수월하게 할 수 있습..

문제 풀이 트럭이 진입할 때 걸리는 시간, 나갈 때 걸리는 시간이 헷갈리는 문제입니다. 예시 1번을 보면 0 ~ 2초에 건널 것 같은 트럭이 0 ~ 1초에는 진입하고, 1 ~ 3초까지 건넙니다. 이 점을 이해하고 문제를 풀어봅시다. 1초 단위로 업데이트를 합니다. 다리에 있는 트럭들 위치를 1만큼 이동시킵니다. 위치가 0이 된 트럭은 제거해줍니다. 만약 1, 2번 단계 이후에 weight_capacity 여유가 있다면 추가 시켜줍니다. [truck_weight, bridge_length]로 추가시킵니다. 추후에 다리 끝에 도달 했을 때 제거된 트럭 무게를 구할 수 있게 됩니다. deque 자료구조를 통해 첫 번째 원소를 추출해내는 작업을 수월하게 할 수 있습니다. 프린터 문제 해설 에서 deque 설명을..

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