본문 바로가기

Algorithm144

[프로그래머스] 2022 KAKAO TECH INTERNSHIP/등산코스 정하기/파이썬/python 💡 solutions 💬 heap 자료 구조 사용, 각 출입구들을 노드로 넣고 다익스트라 알고리즘 탐색 💬 1. 산봉우리는 한 개만 지나야 하므로 탐색 노드가 산봉우리인 경우 탐색 중단 💬 2. 해당 노드를 지났던 기존 intensity(dist[node])가 현재의 intensity 보다 작은 경우는 이미 더 작은 intensity로 해당 노드를 지날 수 있다는 의미이므로 탐색 중단하도록 조건 처리 💬 각 노드의 intensity를 저장하는 dist 배열에서 값을 업데이트 할 때는 최대 intensity (현재 intensity, 다음 노드의 intensity 중 큰 값)로 저장한다. 💬 산봉우리들을 비교하여 가장 작은 intensity를 갖는 경우를 답으로 반환한다. 단, intensity가 동일한 .. 2022. 9. 12.
[프로그래머스] 2022 KAKAO TECH INTERNSHIP/두 큐 합 같게 만들기/파이썬/python 💡 solutions 💬 첫 번째 풀이, deque 자료 구조 활용하여 반복문으로 두 큐의 합 같게 연산, 두 큐의 최대 길이만큼 반복했는데도 두 큐의 합을 같게 하지 못하면 -1 반환하는 조건 추가 💬 두 번째 풀이, 두 개의 큐를 하나의 큐로 합쳐서 투 포인터로 두 큐의 합이 같아지는지 확인 🤖 code # 첫 번째 풀이 from collections import deque def solution(queue1, queue2): queue1, queue2 = deque(queue1), deque(queue2) sum1, sum2 = sum(queue1), sum(queue2) target_sum = (sum1 + sum2) // 2 cnt = 0 if max(queue1) > target_sum or .. 2022. 9. 10.
[프로그래머스] 2022 KAKAO TECH INTERNSHIP/성격 유형 검사하기/파이썬/python 💡 solution 💬 질문에 따른 선택을 기준으로, 딕셔너리 자료 구조 활용하여 각 성격 유형별 점수를 먼저 구한다. 💬 4가지 각 지표별로 두 가지 성격 유형의 점수를 비교하여 최종적으로 성격 유형을 결정한다. 👨‍💻 code def solution(survey, choices): charactors_dict = { 'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0, } # 모든 질문의 성격 유형 점수 계산 for i in range(len(survey)): current_question = survey[i] current_answer = choices[i] default_score = 4 if current_answer < default.. 2022. 9. 10.
[프로그래머스] 기지국 설치 / level 3 / 파이썬 / python 💡 solutions 💬 문제에서 구해야 하는 답은 '증성해야 할 기지국 개수의 최솟값'이다. 따라서 이를 구하기 위해서는 설치된 기지국으로부터 전파가 전달되지 않는 아파트들을 먼저 찾아야 한다. 💬 설치된 기지국 리스트를 가지고 순차적으로 탐색한다. start, end값을 갱신하며 전파가 전달되지 않는 아파트의 개수(before)를 구간별로 찾는다. 💬 spread는 기지국 하나를 설치하면 결과적으로 전파를 전달 받는 아파트의 개수이다. (기지국의 위치 또한 포함) 예를 들어 w가 2이면 총 5개의 아파트가 전파를 전달 받을 수 있다. 💬 한 구간에서 전파가 전달되지 않은 아파트들의 개수를 spread로 나눈 몫을 올림한 값이 바로 증설해야 할 기지국 개수이다. 모든 구간을 탐색하여 증설해야 할 기지국.. 2022. 4. 16.
[프로그래머스] 스티커 모으기(2) / 파이썬 / python / DP문제 💡 solutions 💬 첫 번째 스티커를 뜯은 경우 / 첫 번째 스티커를 뜯지 않은 경우 두 가지로 나눠서 DP 테이블을 만들고 풀이를 진행함. 💬 테스트케이스 33번이 런타임이 나서 찾아보니, 엣지 케이스 N = 1일 때를 처리해주지 않아서 인덱스 에러가 발생했고, 첫 번째 if문으로 해당 케이스를 보완. 👨‍💻 code def solution(sticker): if len(sticker) == 1: return sticker[0] dp1 = [0]*len(sticker) # 첫 번째 스티커를 뜯은 경우 dp2 = [0]*len(sticker) # 첫 번째 스티커를 뜯지 않은 경우 dp1[0] = sticker[0] dp1[1] = sticker[0] for i in range(2, len(stick.. 2022. 4. 15.
알고리즘 문제 풀이 700문제 기념🎉 그 동안 풀었던 알고리즘 문제 수가 벌써 700개 넘었다. 지금 세어보니 총 707문제였다. 알고리즘 문제 풀이는 SWEA, 백준, 프로그래머스를 이용해서 풀어왔고, 프로그래머스 같은 경우 반복해서 문제를 연습하고 싶어 계정을 2개로 만들어서 사용했다. 한번 해결했던 문제는 다른 언어로 해결해도 추가로 카운트 되지 않고, 코드업에서 풀었던 문제들은 포함하지 않았기 때문에 실질적으로 해결한 문제 수는 더 많긴 하다. 중간에 쉬었던 기간도 있지만 20년도부터 알고리즘 문제 풀이를 틈틈이 진행해왔고 돌아보니 생각보다 많은 문제를 해결한 거 같아 뿌듯하다. 알고리즘 문제 풀이를 시작한 계기는 원래 기업 채용을 위한 것이었지만, 주어진 문제에 대해 고민하고 해결했던 과정에서 논리적으로 생각하는 힘과 문제해결 능력.. 2022. 2. 19.