분류 전체보기 154

[프로그래머스 / Java] [PCCP 기출문제] 1번 / 붕대 감기

문제https://school.programmers.co.kr/learn/courses/30/lessons/250137 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 개요 게임 속 캐릭터가 붕대 감기라는 회복 기술을 사용하며, 주기적으로 몬스터의 공격을 받는다. 붕대 감기는 일정 시간 동안 매초 체력을 회복하며, 그 시간 동안 연속으로 유지되면 추가 회복량을 얻는다. 단, 몬스터의 공격을 받으면 기술이 취소되고 연속 성공 시간이 초기화된다. 주어진 기술 정보(bandage), 최대 체력(health), 몬스터의 공격 패턴(attacks)을 기반으로, 모든 공격이 끝난 직후 캐릭터의 남은 체력을 계산하거나..

[프로그래머스 / Java] 택배 상자 꺼내기

문제https://school.programmers.co.kr/learn/courses/30/lessons/389478 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제개요 이 문제는 번호가 1부터 n까지 붙은 택배 상자를 가로 w개씩 지그재그 방식으로 층층이 쌓았을 때, 특정 번호의 상자를 꺼내기 위해 위에 있는 상자들을 모두 치워야 하는 상황을 다룬다. 입력으로 n(총 상자 개수), w(가로에 놓이는 상자 개수), num(찾고자 하는 상자 번호)이 주어지면, 해당 상자를 포함하여 꺼내야 하는 상자의 총 개수를 구하는 문제다. 접근방법1. 단순구현import java.util.*;class Solution..

[프로그래머스 / Java] 도넛과 막대 그래프

문제https://school.programmers.co.kr/learn/courses/30/lessons/258711 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 개요그래프가 도넛, 막대, 8자 모양으로 구성되어 있다고 할 때, 그래프의 간선 정보를 통해 다음을 구해야 한다.새롭게 생성한 정점 번호도넛 모양 그래프의 개수막대 모양 그래프의 개수8자 모양 그래프의 개수 접근 방법1. 생성된 정점(중심 노드) 찾기out-degree ≥ 2 && in-degree == 0 → 이 정점이 생성한 노드 (다른 그래프들로 간선이 뻗음)2. 각 정점의 in/out-degree를통한 그래프 찾기도넛의 특징:in =..

[프로그래머스 / Java] 수식 최대화

문제https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 개요 숫자와 연산자(+,-,*)로 이루어진 수식이 하나 주어진다. 이 수식에서 연산자의 우선순위를 자유롭게 재정의할 수 있다. 단, 같은 우선순위는 존재할 수 없고, 연산자가 2개면 2!, 3개면 3!의 조합이 나온다. 각각의 조합에 따라 수식을 계산하고, 그중 절댓값이 가장 큰 값을 찾아야 한다. 예를 들어 "100-200*300-500+20"라는 수식이 주어졌을 때, 우선순위를 * > + > -처럼 정의하면 결과는 -60420이 되고, 절..

전략 패턴 - Java

전략 패턴이란? 전략 패턴이란 알고리즘을 각각 분리해서 클래스로 만들고, 그 알고리즘을 사용하는 쪽에서 필요할 때 선택해서 사용하는 방식이다. 쉽게 말해, 자주 바뀌는 기능을 하나의 클래스로 묶지 않고 외부로 분리해서 관리하는 설계 방식이다. 전략 패턴의 구조:1️⃣ Strategy (인터페이스 또는 추상 클래스)알고리즘의 공통 메서드 선언2️⃣ ConcreteStrategy (구체 전략)Strategy를 구현한 실제 알고리즘 클래스들3️⃣ Context (문맥, 전략을 사용하는 쪽)Strategy 객체를 받아서, 필요한 곳에서 전략 메서드를 호출 예시 코드// 1. Strategy 인터페이스public interface PaymentStrategy { void pay(int amount);}// ..

cs 2025.07.13

싱글톤 패턴 - Java

싱글톤 패턴이란?싱글톤(Singleton) 패턴은 하나의 클래스에 대해 오직 하나의 인스턴스만 가지도록 설계하는 패턴이다. 보통 DB 연결 모듈이나 설정 정보 관리 등, 인스턴스가 여러 개 생성될 경우 불필요하거나 문제가 될 때 자주 사용된다. 예를 들어 DB 연결을 매번 새로 생성하는 것은 리소스 낭비다. 그래서 한 번 생성한 DB 연결 인스턴스를 여러 모듈에서 공유해서 사용한다. 싱글톤 패턴으로 DB 연결하는 코드더보기import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBConnection { // 유일한 인스턴스 저장 private static DBConnecti..

cs 2025.07.11

[프로그래머스 / Java] 양과 늑대

문제https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 개요이 문제는 2진 트리 형태의 초원을 탐험하면서 가능한 많은 양을 모으는 문제다.트리의 각 노드에는 양 또는 늑대가 한 마리씩 배치되어 있고, 루트 노드(0번)에서 출발하여 노드를 방문할 때마다 그 노드에 있는 동물이 따라오게 된다.문제의 핵심 조건은 다음과 같다:양과 늑대가 함께 따라오며,늑대의 수가 양의 수 이상이 되는 순간, 모든 양이 잡아먹혀 탐색이 실패하게 된다.이 조건을 지키면서 가능한 많은 양을 수집하는 경로를 탐색해야 한다. ..

[프로그래머스 / Java] 봉인된 주문

문제 개요주문서는 알파벳 소문자로 이루어진 모든 문자열을 특정 규칙에 따라 정렬한 리스트다.문자열 길이가 짧을수록 먼저 온다.길이가 같다면 사전 순으로 정렬된다.예를 들어 "a", "b", ..., "z", "aa", "ab", ..., "zz", "aaa", ... 순으로 이어진다.하지만 일부 문자열이 삭제된 상태이며, 삭제된 문자열들을 제외하고 남은 문자열 중에서 n번째에 위치한 문자열을 찾아야 한다. 접근 방법 이 문제는 문자열을 정렬 순서대로 하나씩 탐색하는 방식으로는 풀 수 없다. 최대 n이 10^15까지 가능하기 때문에 효율적인 방식이 필요하다. 따라서 문자열을 고유한 숫자에 매핑해서 계산하고, 삭제된 문자열이 영향을 주는 범위를 고려해 n을 보정한 후 다시 문자열로 변환하는 방식으로 해결했..

DB대신 캐시? - 성능 개선(캐시)

서비스의 트래픽이 증가하면서 응답 속도가 느려지고 처리량(TPS)이 한계에 가까워질 때, 가장 먼저 떠오르는 해결책은 서버 확장이다. 수직 확장(서버 스펙 업그레이드)이나 수평 확장(서버 추가)은 효과가 빠르지만, 비용이 많이 들고 구조도 복잡해진다. 이럴 때, 보다 효율적인 대안으로 떠오르는 것이 바로 캐시(Cache) 이다. 캐시란?캐시는 자주 사용하는 데이터를 미리 저장해두고, 같은 요청이 다시 들어오면 원본(DB나 외부 API 등)을 거치지 않고 즉시 반환하는 저장소다. 내부적으로는 보통 Key-Value 구조의 Map과 유사하며, 응답 속도를 극적으로 단축시킬 수 있다.캐시 동작 방식서버는 먼저 캐시에서 데이터 조회 시도캐시에 데이터가 있으면 → 그대로 반환 (DB 접근 생략)캐시에 없다면 → ..

개발/성능개선 2025.05.17

[프로그래머스 / Java] 파괴되지 않은 건물

https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 개요이 문제는 N x M 크기의 게임 맵에서 건물들의 내구도를 관리하는 문제다. 각각의 칸에 건물이 존재하며, 적군은 직사각형 범위로 건물의 내구도를 감소시키는 공격을, 아군은 직사각형 범위로 내구도를 증가시키는 회복 스킬을 사용한다. 모든 공격과 회복이 끝난 후, 내구도가 1 이상인 건물의 개수를 계산하는 것이 목표다. 접근 방법이 문제는 누적합을 활용한 2차원 차이 배열 (2D Difference Array) 기법으로 해결해야 효율..