전체 글

장호진의 개발 블로그
📌 프로그래머스 [92342]: 양궁대회🔗 문제 링크문제 설명 📄어피치와 라이언이 n발의 화살로 점수를 겨루는 게임. 어피치는 이미 화살을 쏜 상태이고, 라이언은 남은 n발을 적절히 배분하여 가장 큰 점수 차이로 승리해야 한다. 만약 동일한 점수 차이가 나면 낮은 점수를 더 많이 맞힌 경우를 선택한다.문제 접근 방식 💡DFS(깊이 우선 탐색) 백트래킹을 활용하여 모든 가능한 라이언의 화살 배치를 탐색.라이언이 어피치보다 +1개 더 맞추거나, 해당 점수를 포기하는 두 가지 선택이 가능.점수 차이를 계산하여 best_diff를 갱신하고, 가장 큰 점수 차이를 가진 경우를 선택.best_diff가 0 이하라면 라이언이 승리할 방법이 없으므로 [-1]을 반환.여러 경우가 있을 경우 가장 낮은 점수를 많이..
📌 프로그래머스 [이모티콘 할인 행사]🔗 문제 링크문제 설명 📄이모티콘 할인 행사를 진행할 때, 사용자들이 이모티콘을 구매하거나 이모티콘 플러스 서비스에 가입하는 최적의 경우를 찾아야 합니다. 할인율을 다르게 적용했을 때의 결과를 계산하여, 가입자 수가 최대가 되는 경우를 찾고, 같은 가입자 수라면 매출이 최대가 되는 경우를 선택해야 합니다.문제 접근 방식 💡할인율(10%, 20%, 30%, 40%)을 이모티콘마다 다르게 적용할 수 있다.각 사용자는 특정 할인율 이상일 때만 구매하며, 구매 금액이 특정 금액 이상이면 이모티콘 플러스에 가입한다.완전 탐색(BFS)을 사용하여 모든 할인 조합을 탐색하고 최적의 결과를 찾는다.bfs() 함수는 현재까지의 구매 금액을 추적하며, 모든 이모티콘에 대해 할인..
📌 프로그래머스 [[PCCP 기출문제] 2번 / 퍼즐 게임 챌린지]🔗 문제 링크문제 설명 📄퍼즐 조각 난이도를 조정하는 게임diffs 리스트는 각 퍼즐 조각의 난이도를 나타냄.times 리스트는 각 퍼즐 조각을 맞추는 데 걸리는 시간.제한 시간 limit 내에서 최대한 난이도를 낮춘 상태에서 모든 퍼즐을 맞추려면 최소 난이도는 얼마인가?문제 접근 방식 💡누적 시간 계산times 리스트를 사용하여 각 퍼즐 조각이 얼마나 걸리는지 누적.최소 난이도 탐색이진 탐색을 사용하여 limit 내에서 가능한 최소 난이도(level)를 찾음.Solution 💻def solution(diffs, times, limit): faild = [times[0]] for i in range(1, len(diff..
📌 프로그래머스 [후보 키]🔗 문제 링크문제 설명 📄주어진 relation 테이블에서 유일성과 최소성을 만족하는 후보 키의 개수를 구해야 한다.유일성: 후보 키로 선택된 컬럼 조합이 모든 행에서 서로 다른 값을 가져야 한다.최소성: 이미 후보 키가 된 컬럼의 부분 집합이 다른 후보 키가 될 수 없다.문제 접근 방식 💡모든 컬럼 조합을 생성하고, 유일성과 최소성을 검사한다.유일성 검사: 같은 조합이 존재하면 후보 키로 사용할 수 없음.최소성 검사: 기존 후보 키에 포함된 조합이라면 새로운 후보 키가 될 수 없음.후보 키의 개수를 구함.Solution 💻from itertools import combinationsdef solution(relation): database = set() f..
📌 프로그래머스 [문자열 압축]🔗 문제 링크문제 설명 📄주어진 문자열 s를 일정한 길이(i)로 잘라서 압축했을 때,가장 짧은 길이로 표현되는 결과를 찾아야 한다.같은 문자가 연속되면 개수를 붙여서 압축한다.문제 접근 방식 💡1부터 len(s) // 2까지의 길이(i)로 문자열을 압축해본다.잘린 문자열을 비교하며 중복 개수를 체크하고 압축.압축된 길이를 비교하여 최소값을 찾는다.Solution 💻def solution(s): if len(s) == 1: return 1 answer = float('inf') for i in range(1, len(s) // 2 + 1): result = 0 before = s[:i] count = ..
📌 프로그래머스 [거리두기 확인하기]🔗 문제 링크문제 설명 📄5×5 크기의 대기실 places 리스트가 주어진다.응시자(P)들이 거리두기를 준수하는지 확인해야 한다.단, 파티션(X)이 있으면 거리 제한을 무시할 수 있다.모든 대기실이 거리두기를 지키면 1, 그렇지 않으면 0을 반환한다.문제 접근 방식 💡대기실을 순회하며 응시자(P)가 있는 위치를 탐색.상하좌우(pattern)를 이동하며 거리두기 준수 여부 검사.거리가 2인 위치도 추가 검사하여 파티션(X) 여부 체크.Solution 💻def solution(places): pattern = [(0,1), (1,0), (0,-1), (-1,0)] def judg(place, x, y): for px, py in pa..
📌 프로그래머스 [서버 증설 횟수]🔗 문제 링크문제 설명 📄매 시간마다 새로운 플레이어가 유입된다.서버는 한 번에 m명씩 추가할 수 있으며, 추가된 서버는 k시간 동안 유지된다.최소한의 증설 횟수로 모든 플레이어를 수용해야 한다.Solution 💻def solution(players, m, k): q = [] max_players = 0 answer = 0 hour = 0 for i in players: if q and q[0][1] == hour: max_players -= q.pop(0)[0] i -= max_players if i >= m: q.append([(i //..
📌 프로그래머스 [디펜스 게임]🔗 문제 링크문제 설명 📄n개의 병력을 가지고 있으며, enemy 리스트에 나타나는 적들과 매 라운드 전투를 진행해야 한다.단, 최대 k번은 병력을 사용하지 않고 방어할 수 있다.방어 기회를 최적화하여 가장 많은 라운드를 버틸 수 있도록 해야 한다.문제 접근 방식 💡우선순위 큐 (heapq)를 사용하여 가장 적은 병력의 적을 우선적으로 넘긴다.현재 적이 기존에 넘긴 적 중 최소값(q[0])보다 크다면 교체한다.병력(n)을 초과하여 소모하면 게임 종료.Solution 💻import heapqdef solution(n, k, enemy): answer = 0 q = [] for enem in enemy: if len(q) = enem..
개발하는 장씨
개발하는 장씨