알고리즘 18

[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 문제 접근 방향각 시간대별..

[백준/Java] 10986. 나머지 합

🧩  문제 설명정수로 이루어진 수열이 주어졌을 때,부분 구간의 합이 M으로 나누어떨어지는 경우의 수를 구하는 문제!부분 구간은 연속된 구간이어야 함.범위: 1 ≤ N ≤ 1,000,000예시 입력:5 3 1 2 3 1 2 예시 출력:7💡 핵심 아이디어이 문제는 완전탐색(O(N²))으로는 시간 초과가 나기 때문에누적합(Prefix Sum) + 나머지의 개수 세기(counting)를 이용해서 O(N) 으로 해결해야 한다!📌  수학 개념sum[j] - sum[i] 가 M으로 나누어떨어진다⟺ sum[j] % M == sum[i] % M즉, 누적합의 나머지가 같은 두 시점을 고르면,그 사이 구간의 합은 M으로 나누어떨어짐!✅  알고리즘 흐름누적합을 계산하면서 M으로 나눈 나머지를 구함나머지 값의 등장 횟수..

알고리즘/백준 2025.03.23

[LeetCode/Java] 2. Add Two Numbers

https://leetcode.com/problems/add-two-numbers/ 알고리즘 문제를 풀다 보면, 가끔은 나도 모르게 ‘답만 나오면 된다’는 식으로 접근할 때가 있다.그런데 이번 문제를 풀면서 Linked List라는 자료구조의 본질적인 구조와 연결 방식을 다시 생각하게 됐다.단순한 구현 문제처럼 보여도, 기초를 다지는 데 정말 좋은 문제였던 것 같다.그래서 이 문제는 그냥 넘기지 않고, 블로그에 기록해두기로 🤭 [문제 간단 요약]두 개의 역순으로 저장된 Linked List가 있고, 각 노드는 한 자리 숫자를 담고 있다.이걸 실제 정수처럼 더해서, 결과를 똑같이 역순 Linked List로 리턴하기Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0..

비트마스킹(Bit Masking)

비트마스킹 (Bit Masking)비트마스킹은 정수를 이진수로 표현해서 특정 상태를 관리하는 기법이다.보통 비트 연산자를 활용해서 데이터를 조작한다. 0b10101(십진수 21)처럼 이진수로 보면, 각각의 자리가 어떤 상태를 나타내는 플래그가 될 수 있다.1 이면 "켜짐" (True, ..)0 이면 "꺼짐" (Flase, ..)📌 비트 연산자 정리연산자설명예시 (A=0b1010, B=0b1100)결과& (AND)둘 다 1이면 1A & B0b1000 (8)``(OR)하나라도 1이면 1`A^ (XOR)다르면 1, 같으면 0A ^ B0b0110 (6)~ (NOT)비트 반전 (1->0, 0->1)~A0b...11110101 (보수연산)비트들을 왼쪽으로 이동A 0b10100 (20)>> (오른쪽 시프트)비트들을..

알고리즘/개념 2025.02.16

[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) 복잡도의 정렬을 사용해도 성능 문제는 발생하지..