알고리즘/Programmers 6

[Programmers/Python] 완전범죄

1. 문제 파악하기모든 물건을 훔쳐야 한다.각 물건은 훔칠 때마다 a/b 두 도둑 중 하나가 흔적을 남긴다.a의 흔적 합이 n 이상이면 a가, b의 흔적이 m이상이면 b가 잡힌다.목표는 "둘 다 잡히지 않으면서" a의 흔적 합을 최소화하는 것각 물건마다 선택(a가 훔칠까, b가 훔칠까)을 해야하고,전체 선택 결과에 대해 두 변수(=a의 흔적, b의 흔적)가 제약(그 중 a의 흔적을 최소화 해야한다=> 전형적인 DP(동적 계획법) 문제 형태2. DP 상태(메모이제이션) 설계dp[k] = 지금까지 b 의 흔적 합이 정확히 k 일 때, a의 흔적 합의 최소값배열 길이는 m (b가 잡히지 않으려면 k 초기값INF = 10**9dp = [INF]*mdp[0] = 0 # b가 0 흔적일 때 a도 0 이제 물건을 하..

[Programmers/Java] 서버 증설 횟수

레벨2 > 2025년 프로그래머스 코드챌린지 2차 예선 > 서버 증설 횟수사용 언어 : Java 문제 요약이용자가 m명 늘어날 때마다 서버 1대가 추가로 필요이용자가 m명 미만이면 서버가 필요하지 않음이용자가 n×m명 이상 (n+1)×m명 미만이면 n대의 서버가 필요서버는 증설한 후 k시간 동안만 운영모든 게임 이용자를 감당하기 위한 최소 서버 증설 횟수를 찾아야 함변수players : 0시에서 23시까지의 시간대별 게임 이용자의 수를 나타내는 1차원 정수 배열m : 서버 한 대로 감당할 수 있는 최대 이용자의 수k : 서버 한 대가 운영 가능한 시간을 나타내는 정수제한 사항players 길이 : 240 players[i] : i 시 ~ (i + 1) 시 사이의 이용자 수1 1 문제 접근 방향각 시간대별..

[Programmers/Python] 추억 점수

언어 : Python문제 제한 사항 1. 문제 분석사진 속 인물의 이름과 그리움 점수를 기반으로 각 사진의 추억 점수를 계산하는 문제주어진 데이터를 활용하여 각 사진별로 점수를 계산하고, 이를 순서대로 배열로 반환한다.2. 계산 로직name 과 yearning 배열을 매핑하여 딕셔너리를 생성한다각 photo[i] 의 이름이 딕셔너리에 있는 경우 해당 점수를 가져오고, 없는 경우 0으로 처리한다각 사진의 점수를 합산하여 결과 리스트에 저장한다3. 제한 사항 분석name 의 길이와 yearning 의 길이는 항상 동일하다name 에는 중복된 이름이 없으므로 딕셔너리로 변환하기 적합하다name 과 yearning 배열의 길이가 최대 100, photo 배열의 길이가 최대 100, 각 내부 배열의 길이가 최대 ..

[Programmers/Python] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지

0. 사용언어 : Python1. 문제 2. 문제 분석2-1. 문제각 퍼즐에는 난이도(diff)와 소요 시간(time)이 있으며, 숙련도(level)에 따라 퍼즐을 푸는 데 걸리는 시간이 달라진다.규칙 설명:- 현재 퍼즐의 난이도가 숙련도 이하일 경우(diff - 현재 퍼즐의 난이도가 숙련도보다 높을 경우(diff > level), 퍼즐을 여러 번 틀리게 된다- 이때 틀리는 횟수는 diff - level 이다.- 퍼즐을 틀릴 때마다, 퍼즐의 소요 시간(time_cur)과 이전 퍼즐의 소요 시간(time_prev)이 더해진 시간을 추가로 사용한다.- 마지막으로 틀리지 않고 퍼즐을 풀 때는 소요 시간(time_cur)만 더한다. 2-2. 제한사항퍼즐의 개수(n):최대 300,000개의 퍼즐이 주어질 수 있다..

[Programmers/Python] 달리기 경주

1. 문제 2. 문제분석요구사항 파악:주어진 선수 목록에서 해설진이 부르는 선수(callings) 의 이름에 따라 그 선수가 자기 앞의 선수를 추월하게 해야한다-> callings 리스트를 순회하면서 선수들의 순서를 갱신하고, 최종 순위를 반환한다.시간 복잡도 문제 인식:callings 의 길이가 최대 1,000,000에 달하므로, 단순히 리스트에서 인덱스를 찾아 순서를 변경하는 방식은 O(n*m)의 시간 복잡도를 가지며 시간 초과가 발생할 가능성이 크다따라서, 선수의 위치를 빠르게 조회하고 갱신할 수 있는 방법을 찾아야 한다효율적인 자료구조:선수의 현재 위치를 빠르게 조회하고 수정할 수 있는 자료구조가 필요하다딕셔너리와 리스트를 조합해서 선수 이름을 기준으로 위치를 빠르게 찾고, callings 에 따..

[Programmers/Python] [PCCE 기출문제] 10번 / 데이터 분석도움말

언어: Python1. 문제data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]]  2. 문제 분석여기서 고려할 부분은 필터링과 정렬 기준인 ext와 sort_by가 동적으로 바뀐다는 것이다. 코드를 작성할 때 ext와 sort_by 값에 따라 유연하게 접근할 필요가 있다고 생각했다.이런 경우, 컬럼 이름에 따른 인덱스 매핑을 사용하면 편리하다. ext와 sort_by를 인덱스에 매핑하여 동적으로 데이터에 접근하면 필터링 및 정렬 기준이 바뀌더라도 쉽게 코드에 반영할 수 있다. + 제한사항 분석데이터 크기:data의 길이는 최대 500개로 제한된다. 따라서 O(n log n) 복잡도의 정렬을 사용해도 성능 문제는 발생하지..