프로그래머스 21

[1 Week] 프로그래머스 - 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python

프로그래머스 데이터 엔지니어링 강의 1주차를 수강하며 느낀점을 정리해보려고 합니다. 1️⃣ 주차 강의 내용 지난 1주차 강의 내용을 간략히 정리해보자면 다음과 같다. 새로운 분야를 학습하는 태도 남과 비교하지 않되, 나도 학습하면 저렇게 발전해나갈 수 있다라는 마인드를 갖자 무엇을 모르는 지 정의하고, 조사하여 정리한다. 작은 성공을 반복해서 자신감을 높이자. Agile 방법론에 익숙해질 것 빠르게 요구조건 파악 후 반영할 것 짧은 사이클을 빠르고 반복적으로 구현하는 것 중요 데이터 팀과 데이터 엔지니어의 가치 바람직한 데이터 팀 구조는 무엇일까? Centralized, Uncentrialized, Hybrid 일의 성공과 실패를 어떻게 측정할 것이냐? ⭐ 본인의 성공을 입증할 수 있는 지표 설정 ⭐ A..

프로그래머스 스택큐 - 다리를 지나는 트럭

🔸 문제 접근 방식 truck_weights를 큐에 넣는다. bridge_length보다 작고, weight를 넘지 않으면 trcuk을 Queue에 넣는다. truck은 bridge_length + 1이 되면 Queue에서 빠져나온다. truck_weights가 비어있고, Queue에 남아 있을 경우 seconds를 증가시킨다. truck이 bridge_length +1이 되면 Queue에서 빠져나온다. 💧 Source Code from collections import deque def solution(bridge_length, weight, truck_weights): ''' Notes: https://programmers.co.kr/learn/courses/30/lessons/..

알고리즘 2021.06.26

프로그래머스 - 기능 개발 (스택,큐)

🔸 문제접근방식 progresses, speeds를 큐에 넣는다. progresses의 0번째 값이 100이상이면 꺼낸다. speeds도 progress 꺼낼 때 0번째부터 함께 꺼낸다. 1일마다 speeds만큼 progresses를 더한다. progresses 원소를 모두 꺼낼 때까지 2-3을 반복한다. 💧 Source Code from collections import deque def solution(progresses, speeds): ''' https://programmers.co.kr/learn/courses/30/lessons/42586 Notes: 1. progresses를 큐에 넣고 100이상이면 꺼낸다. 2. 1일마다 speeds만큼 progresses를 더한다. 3. 하루마다 1,2번..

알고리즘 2021.06.25

프로그래머스 - 프린터(스택,큐)

🔸 문제접근방식 priorities를 위치를 저장하는 값과 함께 큐에 넣는다. 더 큰 값이 있다면 0번째 값을 맨 뒤로 보낸다. 더 큰 값이 없다면 해당 값을 출력하고 answer를 1증가시킨다. 해당 위치의 값이 location이라면 answer를 반환한다. 💧 Source Code from collections import deque def solution(priorities, location): '''https://programmers.co.kr/learn/courses/30/lessons/42587 Notes: 1. priorities의 0번째보다 더 큰 값이 있는지 확인한다. 2. 더 큰 값이 있다면 0번째값을 맨 뒤로 보낸다. 3. 더 큰 값이 없다면 해당 값을 출력한다. Args: prior..

알고리즘 2021.06.24

프로그래머스 - 구명보트 (Greedy)

🔸 문제 접근 방식 가장 무거운 사람을 먼저 태운다. 가장 가벼운 사람부터 보트에 태워나간다. 보트 무게가 limit를 초과하면, 가벼운 사람을 한 명 내리고 1번으로 돌아간다. ❗ 주의 사항 처음에 리스트의 원소가 남아있을 때까지 While문을 반복하였다. 하지만 리스트 삭제 연산 수행 시 시간초과가 발생했다. 리스트 원소 최대값이 50,000임에도 비효율적인 알고리즘으로 판명되었다. 따라서 리스트를 삭제하는 대신, left, index 포인터를 두고 indexing하였다. 💧 Source Code def solution(people, limit): ''' https://programmers.co.kr/learn/courses/30/lessons/42885 Notes: 1. 가장 무거운 사람을 먼저 태..

알고리즘 2021.06.23

프로그래머스 - 큰 수 만들기(Greedy)

🔸 문제 접근 방식 stack에 값이 없거나, 더 작은 경우 넣는다. top에 위치한 값이 더 작으면 해당 값을 배내고, k를 감소시킨다. k가 0이되면 남은 값들을 스택에 넣는다. 스택이 꽉 찼는데, k가 남아있다면 맨 위에서 k개를 꺼낸다. 💧 Source Code def solution(number, k): ''' Notes: 1. stack에 값이 없거나, 더 작은 경우 넣는다. 2. top에 위치한 값이 더 작으면 해당 값을 빼내고, k를 감소시킨다. 3. k가 0이되면 남은 값들을 스택에 넣는다. 4. 스택이 꽉 찼는데, k가 남아있다면 맨 위에서 k개를 꺼낸다. Args: number (str) : 주어진 숫자 (문자열로 주어짐) k (int) : 삭제할 숫자 개수 Returns: answe..

알고리즘 2021.06.22

프로그래머스 - 조이스틱 (Greedy)

🔸 문제접근방식 'A' 문자가 아닌 곳으로 이동하기까지 왼쪽, 오른쪽 이동 횟수를 계산 후 최소값을 더한다. 왼쪽 or 오른쪽 이동 후, 문자 완성을 위해 'A'에서부터 문자까지, 'Z'에서부터 문자까지 횟수를 계산 후 최솟값을 더한다. 모든 위치를 다 방문하여 문자열을 완성 시 종료한다. 파이썬에서 리스트는 음수로도 indexing이 가능하다. 가운데 중간 지점에서부터 계산하는 것이 아닌 주어진 조건 'A'부터 혹은 뒤에서 'Z'부터 계산할 것 💧 Source Code def solution(name): ''' Programmers 조이스틱 문제풀이 - Greedy Notes: 1. 'A' 문자가 아닌 곳으로 이동하기까지 왼쪽, 오른쪽 이동 횟수를 계산 후 최소값을 더한다. 2. 왼쪽 or 오른쪽 이동..

알고리즘 2021.06.21

프로그래머스 - 체육복 (Greedy)

🔸 문제 접근 방식 체육복 여벌은 자신 기준 앞, 뒤로만 빌려줄 수 있다는 건 유의 체육복 여벌이 있는데 도난 당한 경우를 먼저 고려할 것. 예외 처리 발생 💧 Source code def solution(n, lost, reserve): ''' 프로그래머스-체육복 문제 풀이 (Greedy) Notes: 1. 체육복 여벌은 자신 기준 앞, 뒤로만 빌려줄 수 있다는 것 주의 2. 체육복 여벌이 있는데 도난 당한 경우를 먼저 고려할 것. 예외 처리 발생 Args: n (int) : 학생 수 lost (list) : 체육복을 잃어버린 학생 번호를 담은 리스트 reserve (list) : 체육복 여벌을 가져온 학생 번호를 담은 리스트 Returns: answer (int) : 체육 수업에..

알고리즘 2021.06.20

프로그래머스 - H-index

🔸 문제 접근 방식 다음 방식으로 문제를 접근하였다. 논문이 인용될 최대값을 H-index로 설정한 뒤 1씩 감소시켜가며 H-index 조건을 확인한다. 인용될 최대값은 len(citations) H-index는 두 조건을 만족한다. H-index 회 이상 인용된 논문의 수가 H-index 이상이다. H-index 회 이하 인용된 논문의 수가 H-index 이하이다. H-index 의 최대값을 선택한다. 📌 문제 풀이 정렬 문제이기는 하나, H-index가 될 target값을 기준으로 citations을 분리했다. target값보다 크거나 같은 논문은 bigList에 추가 target값보다 작거나 같은 논문은 smallList에 추가 그리고 2 조건을 만족하면 H-index 그룹인 resultList에 ..

알고리즘 2021.06.17

프로그래머스 - 가장 큰 수 (정렬)

🔸 문제 해결 방향 문자열 처리를 통해 풀어야한다. 문자열 비교가 어떻기 이루어지는지 숙지할 것 문자열 곱셈을 수행한 뒤 비교한 이유는? 문자열 비교 → 숫자 변환 → 문자열 변환 후 반환 숫자로 바꾸어 주지 않을 시 발생하는 문제는? 문제 접근 리스트 정렬 기능 이용하기 처음 시도는 리스트 정렬 기능을 이용했다. 정렬 시 기준이 되는 key 값을 문자열의 첫 번째 값으로 설정했다. 첫째자리수가 가장 클 경우 앞 쪽에 배치된다. ❌ 첫째 자리 수가 같은 경우 발생 5와 50은 어떻게 비교할까? → 정렬 시 2번째 기준을 문자열 길이로 설정한다. 둘째 자리 수가 같을 경우 문자열 길이가 짧은 쪽이 앞에 배치된다. ❌ 그럼 5, 56, 3의 경우는 어떨까? → 정렬 시 2번째 기준 56, 5, 3이 되어야 ..

알고리즘 2021.06.16