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

문제 풀이 트럭이 진입할 때 걸리는 시간, 나갈 때 걸리는 시간이 헷갈리는 문제입니다. 예시 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..

문제 풀이 이 문제는 데이터가 무슨 의미인지, 그리고 이를 어떻게 처리하는지 생각하는데 도움이 된다 (추상화라고 한다). 주어진 것은 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이 몇 ..

초보부터 고수까지 코드 품질에 관심있고 고급진 프로그래머가 되고 싶다면 블로그에 놀러오세요! 한번 쓴 코드는 5번 이상 읽힌다고 합니다. 프로젝트 규모가 커질 수 록 코드를 쓰는 것보다 읽어야 하는 비중이 늘어납니다. 따라서 사람을 위한 코딩이 중요합니다. 가독성 좋은 코딩을 통해 유지 보수도 쉬워지고 개발 속도도 빨라집니다. 이 블로그는 코드 품질에 대해 고민하고 실습하는 글을 포스팅합니다. 프로그래밍을 직접적으로 하는 구현 단계에 대한 내용을 다룹니다. 1. 관련 책을 리뷰 및 소감평을 쓰고 있습니다. 2. 코딩 테스트 문제풀이를 통해 클린 코드 작성법을 알려드립니다. 초보분들은 코드 품질에 대한 관심을 통해 초창기 습관을 올바르게 기를 수 있습니다. 중수분들은 저와 같이 코드 품질에 대해 지속적으로..

문제 풀이 Counter을 통해 카테코리마다 몇개가 있는지 세어주고 카테고리 선택지 마다 안 입는 경우(1을 더해줌)를 포함해서 가능한 조합을 계산해주면 됩니다. 전부 안 입는 경우는 제외합니다. 직접 Counter에 해당하는 로직을 구현할 수 있지만, collections 에 있는 함수들은 애용해주는게 좋습니다! 클린 코드 작성법 함수 같은 경우 동사형 get_something 으로 이름 붙여주면 가독성이 올라갑니다. for 문 내에 i 같은 임시 변수 대신 cloth 같이 구체적으로 반복시킬 대상을 이름 붙여주면 좋습니다. 주석을 통해 더 설명력 있는 문장을 전달할 수 있습니다. 코드만으로는 더 높은 추상화가 힘들 때 주석을 덧 붙여주면 좋습니다. choices -= 1 여기서 1은 전부 안 입는 경..

문제 풀이 combinations을 써서 푸는 문제입니다. 두개씩 묶은 번호 중에 전화번호가 긴 것이 짧은 것을 포함하는 경우 False, 아니면 True입니다. has_duplication 와 같은 함수를 만드는 연습과 combinations를 연습해보는 문제 같습니다. 함수를 작성할 때, return을 끝에 하나만 작성하면 디버깅 및 유지 보수가 쉬워집니다. 이 글의 반환값 문단을 참고하면 좋습니다. 해답 코드 from itertools import combinations def has_duplication(a, b): duplication = False if len(a) >= len(b): if a[:len(b)] == b: duplication = True else: if b[:len(a)] ==..

문제 풀이 제한사항 중에서 1. 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. 2. completion의 길이는 participant의 길이보다 1 작습니다. 3. 참가자 중에는 동명이인이 있을 수 있습니다. 이 중요합니다. Hash 자료 구조를 이용해 마라톤 선수들 숫자를 셉니다. 선수들의 숫자를 셀 때, 리스트 자료구조를 이용할 경우, 10만명이나 되기 때문에 접근 비용이 매우 큽니다. 그래서 Hash 자료 구조를 이용해야 풀리는 문제입니다. 숫자를 센 이후, 둘을 비교해 차이가 1인 선수를 찾습니다. 파이썬에서 Hash 자료 구조는 내부 자료형인 dict를 이용하면 됩니다. Collections에 있는 Counter는 더 편리하게 리스트내 자료들을 셀 수 있습니다. 아래 ..