분류 전체보기
-
[Python] 오류해결노트: heapq 자료구조 시 NoneType은 있으면 안 된다.코딩테스트 2024. 9. 22. 22:07
TypeError: ' not supported between instances of 'int' and 'NoneType' 1. heapq는 O(log N)의 시간복잡도로 리스트 내 최솟값을 구할 수 있게 해주는 고마운 친구이다.혹시 이 원리를 모르겠다면, 그리고 sort()랑 뭐가 다른지 모르겠다면,min heap 자료구조를 공부하면 된다. 코드 외우지만 말고 반드시 공부하자.import heapqa = [3, 2, 1, 5, 9, 4, 7]heapq.heapify(a)heapq.heappop(a) #1단, 처음부터 heappush()로 구축한 게 아닌 이상 heapify()로 반드시 초기화 진행해야 함. 2. 심지어 원소가 int가 아니라 tuple, list여도 된다.그래서 BFS에서 매우매우매우 ..
-
[Python] 프로그래머스 / Summer/Winter Coding(2019) / 지형 이동코딩테스트 2024. 9. 22. 17:34
문제 링크 생각보다 섬세함이 필요한 BFSBFS 그거 그냥 queue 만들어서 while queue 하면 끝 아님? 싶을 수 있겠지만... BFS에 익숙해진 나머지, 근의 공식 사용하듯이 그렇게 아무 생각 없이 풀면 안 된다는 것을 깨달았다. 일단 이 문제는, MST(최소 스패닝 트리) 방식으로도 충분히 잘 풀 수 있다. 그것도 물론 좋은 방법이지만, 나는 BFS 풀이로 풀었다. 오답 풀이import heapqdef solution(land, height): N = len(land) queue = [(0, 0, 0)] seen = [[False] * N for _ in range(N)] dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] ..
-
꿀팁 : defaultdict(list)의 value를 deque()로 만들면 잘 작동되지 않는다.코딩테스트 2024. 9. 20. 14:46
1. deque()에서는 rotate()가 가능하다.from collections import deque A = deque([1,2,3,4,5])A.rotate(-1)A #deque([5, 1, 2, 3, 4]) 2. deque()를 deepcopy()해도 rotate()가 가능하다.from collections import deque from copy import deepcopyA = deque([1,2,3,4,5])A.rotate(1)B = deepcopy(A)B #deque([5, 1, 2, 3, 4]) 3. dict()의 value가 deque()여도 rotate()가 가능하다.A = {0 : deque([1,2,3,4,5]), 1 : deque([1,2,3,4,5]), 2 : de..
-
[Python] 프로그래머스 / Summer/Winter Coding / 쿠키 구입코딩테스트 2024. 9. 19. 22:29
문제 링크 Simple is the best 쫄지 말자. 구간합 문제는 누적리스트로 풀릴 때가 많다.def solution(cookie): n = len(cookie) S = [0] * (n+1) for i in range(1, n+1) : S[i] = S[i - 1] + cookie[i - 1] #S[i]는 A[i-1]까지의 합 max_sum = 0 for m in range(n-1) : l = 0 r = n-1 while l right : l += 1 else : ..
-
[Python] 프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / [1차] 추석 트래픽코딩테스트 2024. 9. 19. 20:49
문제 링크 정답 코드하라는 대로 하기만 하면 되는 간단한 문제.def solution(lines): times = [] for line in lines: date, time, duration = line.split() hh = int(time[:2]) mm = int(time[3:5]) ss = int(time[6:8]) ms = int(time[9:]) duration = int(float(duration[:-1]) * 1000) end_time = (hh * 3600 + mm * 60 + ss) * 1000 + ms start_time = end_time ..
-
[Python] 프로그래머스 / 2021 Dev-Matching: 웹 백엔드 개발자(상반기) / 다단계 칫솔 판매카테고리 없음 2024. 9. 19. 19:48
문제 링크그.. 다단계가 트리구조의 좋은 예시이긴 하지만 그래도.. 정답코드그냥 시키는 대로 하면 바로 풀리는 문제from collections import defaultdictdef solution(enroll, referral, seller, amount): N = len(enroll) M = len(seller) tree = dict() for i in range(N) : tree[enroll[i]] = referral[i] if referral[i] != "-" else None result_dict = defaultdict(int) for i in range(M) : name = seller[i] ..
-
[Python] 프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / [1차] 셔틀버스코딩테스트 2024. 9. 19. 15:28
문제 링크 반환형식생각보다는 까다로운 반환 형식... "09:41" → 581"10:11" → 611 뭐 이런 식으로 시간 string을 60*hh + mm 해서 int로 바꾸는 건 쉬운데, 사실 그 역과정이 꽤나 복잡하다. "9:41"이 아니라 "09:41"을 반환해야 하기 때문이다. 이럴 때 파이썬 포맷팅을 쓰면 쉽다.f"{5:02d}" # 결과: "05" 정답코드이 문제를 어렵게 생각할 필요는 없다. 결국 이 문제는 어느 게으른 직원이 "가장 마지막 셔틀"의 "가장 마지막 좌석"에 타고 싶어 하는 것이기 때문이다. 탐색조차도 불요하다.from collections import dequedef solution(n, t, m, timetable): # 셔틀 운행 횟수 n, 셔틀 운행 간격 t, ..