📌 프로그래머스: [체육복]🔗 문제 링크문제 접근 방식 💡체육복을 도난당한 학생(lost)과 여벌 체육복을 가진 학생(reserve)을 고려하여 최대한 많은 학생이 체육 수업을 듣게 해야 함.**도난당한 학생과 여벌이 있는 학생이 겹치는 경우(lost ∩ reserve)**를 먼저 처리.앞뒤 학생에게 빌려줄 수 있도록 greedy 방식으로 해결.Solution 💻def solution(n, lost, reserve): answer = [1 for _ in range(n)] for i in lost: answer[i - 1] -= 1 for r in reserve: answer[r - 1] += 1 for i in range(n): ..

전체 글
장호진의 개발 블로그📌 프로그래머스: [모의고사]🔗 문제 링크문제 접근 방식 💡수포자들의 반복되는 패턴을 리스트로 저장하고, 각 패턴을 순회하며 정답과 비교.정답을 맞힌 개수를 저장한 후, 최대 점수를 가진 사람을 반환.불필요한 리스트 사용을 줄이고 enumerate()를 활용하여 깔끔한 코드로 리팩토링.Solution 💻def solution(answers): patterns = [ [1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] ] scores = [sum(a == pattern[i % len(pattern)] for i, a in enumerate(answers))..
📌 프로그래머스: [K번째 수]🔗 문제 링크문제 접근 방식 💡commands 리스트를 순회하면서 각 요청([i, j, k])을 처리.주어진 배열의 i번째부터 j번째까지 자른 후 정렬.정렬된 배열에서 k번째 원소를 선택하여 결과 리스트에 추가.Solution 💻def solution(array, commands): answer = [] for command in commands: arr = sorted(array[command[0]-1:command[1]]) answer.append(arr[command[2]-1]) return answer시간 복잡도 분석 ⏲️자르기(array[i-1:j]): O(N)정렬(sorted()): O(N log N)선택(arr[k..
📌 프로그래머스: [같은 숫자는 싫어]🔗 문제 링크문제 접근 방식 💡주어진 리스트에서 연속된 중복 숫자를 제거하고 순서를 유지하는 문제.answer 리스트의 마지막 값과 비교하여 다를 경우에만 추가.첫 번째 요소는 무조건 포함하므로 미리 answer.append(arr[0])을 수행.Solution 💻def solution(arr): answer = [arr[0]] for i in arr[1:]: if answer[-1] != i: answer.append(i) return answer시간 복잡도 분석 ⏲️시간 복잡도: O(N),리스트를 한 번 순회하면서 조건 확인 후 append() 연산 수행.공간 복잡도: O(N),중복이 없..
📌 프로그래머스: [단어 변환]🔗 문제 링크문제 접근 방식 💡begin에서 target으로 단어를 변환하는 과정에서 한 번에 하나의 문자만 변경 가능.주어진 words 리스트 내에서 변환을 수행하며, 최소 단계로 target에 도달하는 경로를 찾아야 함.BFS(너비 우선 탐색)을 사용하여 가장 빠른 변환 경로를 탐색.Solution 💻from collections import deque def solution(begin, target, words): if target not in words: return 0 visited = set() q = deque() q.append((begin, 0)) visited.add(begin) whi..
📌 프로그래머스: [전력망을 둘로 나누기]🔗 문제 링크문제 설명 📄하나의 전력망으로 연결된 n개의 송전탑이 있다.wires 리스트는 송전탑을 연결하는 전선 정보를 제공한다.전선 하나를 끊어 두 개의 네트워크로 분리할 때, 두 네트워크의 송전탑 개수 차이를 최소화해야 한다.문제 접근 방식 💡모든 전선을 하나씩 제거한 후, 남은 네트워크에서 DFS를 사용하여 연결된 송전탑 개수를 계산.하나의 네트워크 크기를 구하면, 나머지 네트워크의 개수는 전체 개수에서 빼면 됨.가장 작은 차이를 찾도록 갱신.Solution 💻from collections import defaultdictdef search(index, visit, graph): count = 1 for i in graph[index]:..
📌 프로그래머스: [베스트앨범]🔗 문제 링크문제 설명 📄장르별로 가장 많이 재생된 곡을 우선적으로 선택하여 앨범을 구성한다.장르별로 최대 2곡씩 선택하며, 재생 횟수가 같다면 고유 번호가 작은 순서대로 정렬한다.장르의 순서는 총 재생 횟수가 높은 순서대로 정렬한다.문제 접근 방식 💡장르별로 곡을 묶고, 각 곡을 (재생 횟수, 고유 번호) 기준으로 정렬한다.장르별 총 재생 횟수를 기준으로 내림차순 정렬하여, 가장 인기 있는 장르부터 선택한다.각 장르에서 최대 2곡을 선택하며, 재생 횟수가 같다면 고유 번호가 작은 순서대로 정렬한다.우선순위 큐(heapq)를 활용하여 정렬을 효율적으로 수행한다.Solution 💻from collections import defaultdictimport heapqde..
📌 프로그래머스: [위장]🔗 문제 링크문제 설명 📄각 의상의 종류별로 한 개씩 착용할 수 있으며, 최소 하나 이상의 의상을 선택해야 한다.같은 종류의 의상을 여러 개 소유할 수 있지만, 같은 종류에서 한 개만 선택 가능하다.의상의 조합 수를 구하는 문제.문제 접근 방식 💡의상의 종류별로 개수를 세고 조합을 계산해야 한다.특정 종류의 의상을 착용하는 경우의 수는 (해당 종류 개수 + 1)이다. (선택하지 않는 경우 포함)따라서, 모든 종류의 의상을 곱한 값에서 1을 빼면 총 조합 개수가 된다. (모든 의상을 선택하지 않는 경우 제외)Solution 💻from collections import defaultdictdef solution(clothes): pattern = defaultdict(..