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

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

문제 풀이 먼저 여벌 체육복을 가져온 학생이 체육복을 도난당한 경우를 해결해줍니다. 이는 lost, reserve 사이에서 중복을 제거하면 됩니다. filter_duplicate 여벌 체육복을 가져온 학생들의 번호를 가지고 잃어버린 학생들에게 왼쪽번호부터 차례대로 빌려줍니다. lend_clothes_from_nearby_student 전체 학생 수에서 여전히 못빌린 학생 수를 빼면 정답이 나옵니다. 클린 코드 작성법 임의의 두개의 리스트에 대해서 행하는 로직의 경우 list1, list2 처럼 변수명을 지어도 괜찮습니다. for문 내에서 복잡한 로직을 행하게 된다면, 이 부분을 따로 함수를 통해 for문 중첩 수를 줄이는 것이 좋습니다. lend_clothes_from_nearby_student 해답 코..

문제 풀이 전체 카펫 수를 구합니다. 1번에서 구한 값의 약수를 구합니다. 가로와 세로의 길이를 약수, 전체 카펫수 // 약수로 정하고 조건에 맞는지 확인합니다. 조건에 맞으면 가로길이가 세로길이보다 크거나 같게 바꿔줍니다. 클린 코드 작성법 로직별로 함수를 나눕니다. get_factors check for문 내에는 is_correct_factor같이 boolean 변수를 만들고 이를 판정하는 함수로 처리하는것이 좋습니다. 해답 코드 def solution(brown, red): total = brown + red factors = get_factors(total) width, height = 0, 0 for factor in factors: width, height = factor, total // f..

문제 풀이 먼저 던질 수 있는 모든 경우의 수를 만듭니다. get_candidates 그 다음 각각의 경우에 대해 주어진 결과(baseball)가 맞아떨어지는지 확인합니다. 하나라도 틀리면 그 후보는 넘어갑니다. check_candidate baseball에 대해 모두 통과시 가능한 답안이므로 answer_count값을 늘립니다. 클린 코드 작성법 코드 각각이 하나의 기능만 수행하도록 분리합니다. 123 ~ 987 까지 후보군을 만드는 함수 각 후보에 대해 baseball의 guess를 통과하는지 확인하는 함수 1개의 guess, 1개의 후보에 대해 서로 일치하는지 확인하는 함수 permutations에서 나오는 출력형태가 튜플인데 이를 문자로 전환해주는 함수 묶여진 자료형을 다룰 때, 각각에 변..

문제 풀이 문제 자체는 매우 간단합니다. 예시도 두 가지로 직관적입니다. 하지만 숫자 길이가 길어지면 시간 초과가 날 확률이 높습니다. 따라서 문제를 잘 이해하고 최적화할 부분을 찾는게 중요합니다. 풀이 과정 소수가 될만한 후보를 찾습니다. 완전 탐색이 여기서 쓰입니다. permutations 이 후보가 소수인지 확인합니다. 이 부분을 최적화해야 합니다!! 소수인지 판별하는 다양한 알고리즘을 구현해 이 부분만 수정합니다. 이런 기본적인 함수는 인터넷에 최적화 되어있는 코드가 많이 있습니다. 검색해서 활용합시다! 클린 코드 작성법 변수명을 고쳐 문제의 이해력을 높입니다. number_string 문제의 단계별로 함수화합니다. get_candidates check_prime 문제를 풀어나갈 때, 과정을 잘게..

문제 풀이 시험 문제는 최대 10000 문제입니다. 10000번째까지 수포자들의 답안을 작성합니다. 그리고 이 답안들을 정답과 비교하면 됩니다. 비교해서 맞춘 문제 갯수를 셉니다. 마지막으로 가장 높은 점수를 구해, 이 점수에 해당하는 수포자들의 번호를 기록합니다. 클린 코드 작성법 상수나 정해진 것은 위에 작성합니다. MAX_PROBLEM_NUM PARTICIPANT_ONE_PATTERN ... 임시 변수에 적절한 변수명을 붙여 해결하고자 하는 문제의 이해를 높입니다. for response, answer in zip(participant_response, answers) 문에서 두가지 임시 변수: response, answer 해답 코드 MAX_PROBLEM_NUM = 10000 PARTICIPANT..

문제 풀이 빈 큐를 만듭니다. 그리고 동작들을 차례차례 수행합니다. 이 때 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..