JAVA 글 모음

총 111개의 글이 있습니다.

코딩 테스트2026-08-23

택배상자

order 배열은 택배 기사님이 원하는 상자 적재 순서다 기존 컨테이너 벨트는 1번부터 순서대로만 꺼낼 수 있다 보조 벨트는 스택처럼 마지막에 넣은 것부터 꺼낼 수 있다 원하는 순서대로 최대한 실을 수 있는 상자 개수를 구하는 문제다 처음에는 기존 벨트를 실제 리스트로 만들어…

JAVA 프로그래머스
코딩 테스트2026-08-23

롤케이크 자르기

topping 배열은 롤케이크에 일렬로 올라간 토핑 번호다 한 지점을 잘라 두 조각으로 나눴을 때, 양쪽 토핑 종류 수가 같아야 공평하게 나눈 것이다 공평하게 자를 수 있는 방법의 수를 구하는 문제다 처음에는 자르는 위치마다 왼쪽과 오른쪽 배열을 나눠서 각각 서로 다른 토핑…

JAVA 프로그래머스
코딩 테스트2026-08-23

할인 행사

want, number 배열로 정현이가 원하는 제품과 수량을 표현한다 discount 배열은 XYZ 마트가 매일 할인하는 제품 목록이다 연속된 10일 동안 할인 제품 종류와 수량이 want, number와 정확히 일치해야 회원가입할 수 있다 그런 시작일이 총 몇 번 있는지…

JAVA 프로그래머스
코딩 테스트2026-08-23

숫자 변환하기

자연수 x를 y로 바꾸는 데 x+n, x2, x3 세 가지 연산을 쓸 수 있다 x를 y로 바꾸는 최소 연산 횟수를 구하는 문제다 만들 수 없으면 -1을 반환한다 처음에는 x에서 시작해서 세 가지 연산을 재귀적으로 다 시도해보고 y에 도달하는 경로 중 가장 짧은 걸 고르면…

JAVA 프로그래머스
코딩 테스트2026-08-23

두 원 사이의 정수 쌍

원점이 중심인 두 원이 있고 반지름은 각각 r1, r2다 (r1 < r2) 두 원 사이 공간에서 x, y 좌표가 모두 정수인 점의 개수를 구하는 문제다 원 위의 점도 포함해서 센다 처음에는 x, y 좌표를 이중 for문으로 전부 돌면서 각 점이 두 원 사이에 있는지 판별하면…

JAVA 프로그래머스
코딩 테스트2026-08-06

두 큐 합 같게 만들기

길이가 같은 두 큐 queue1, queue2가 주어진다 한 큐에서 원소를 꺼내(pop) 다른 큐에 넣는(insert) 것을 합쳐 작업 1회로 센다 이 작업을 반복해서 두 큐의 원소 합을 같게 만드는 최소 횟수를 구한다 불가능하면 -1을 반환한다 큐 길이는 최대…

JAVA 프로그래머스
코딩 테스트2026-08-06

더 맵게

스코빌 지수가 가장 낮은 두 음식을 골라 가장 낮은 값 + 두 번째로 낮은 값 * 2 로 섞는다 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복한다 모든 음식을 K 이상으로 만들 수 없으면 -1을 반환한다 처음에는 매번 배열을 정렬해서 가장 작은 두 값을 찾아 섞고,…

JAVA 프로그래머스
코딩 테스트2026-08-06

가장 큰 수

0 또는 양의 정수 배열이 주어진다 배열의 숫자를 순서대로 이어 붙여 만들 수 있는 가장 큰 수를 문자열로 반환한다 정답이 클 수 있어서 문자열로 반환한다 처음에는 숫자를 그냥 큰 값부터 정렬해서 이어 붙이면 될 거라 생각했다. 하지만 이 방식은 틀렸다.

JAVA 프로그래머스
코딩 테스트2026-08-06

구명보트

구명보트는 한 번에 최대 2명, 무게 제한 limit이 있다 모든 사람을 구출하는 데 필요한 구명보트 개수의 최솟값을 구한다 무게 제한은 항상 사람들 몸무게의 최댓값보다 크게 주어진다 처음에는 가장 무거운 사람부터 순서대로 보면서, 그 사람과 함께 탈 수 있는 사람을 나머지…

JAVA 프로그래머스
코딩 테스트2026-07-29

멀리 뛰기

한 칸 또는 두 칸씩 뛰어 n칸 끝에 도달하는 방법의 수를 구한다 답은 1234567로 나눈 나머지를 반환한다 n은 최대 2000 처음에는 재귀로 모든 경우를 직접 세어보면 될 줄 알았다.

JAVA 프로그래머스
코딩 테스트2026-07-29

방금그곡

기억한 멜로디 m과 방송된 곡들의 정보(musicinfos)가 주어진다 각 곡은 시작·종료 시각만큼 처음부터 반복 재생된 것으로 간주한다 재생된 악보 안에 m이 그대로 들어있는 곡 중, 재생 시간이 가장 긴 곡의 제목을 찾는다 일치하는 곡이 없으면 "(None)"을 반환한다…

JAVA 프로그래머스
코딩 테스트2026-07-29

사라지는 발판

A와 B가 번갈아 발판 위의 캐릭터를 상하좌우로 움직인다 캐릭터가 떠난 발판은 사라진다 이동할 수 없으면 그 차례 플레이어가 패배한다 이길 수 있는 플레이어는 최대한 빨리, 질 수밖에 없는 플레이어는 최대한 오래 버티도록 플레이했을 때 총 이동 횟수를 구한다 처음에는 각…

JAVA 프로그래머스
코딩 테스트2026-07-29

표 병합

50 × 50 표에서 UPDATE, MERGE, UNMERGE, PRINT 명령을 순서대로 처리한다 MERGE는 두 셀을 하나로 합치고, 값이 있으면 그 값을 유지한다 UNMERGE는 선택한 셀이 속한 병합 그룹 전체를 원래 상태로 되돌린다 PRINT 결과들을 순서대로 배열에…

JAVA 프로그래머스
코딩 테스트2026-07-29

야근 지수

남은 작업량 배열 works와 일할 수 있는 시간 n이 주어진다 매 시간 작업량 하나를 1만큼 줄일 수 있다 야근 피로도는 남은 작업량들의 제곱의 합이다 n시간을 모두 사용해 피로도를 최소화한 값을 구한다 처음에는 매 시간마다 배열을 순회해서 가장 큰 작업량을 찾아 1을 깎는…

JAVA 프로그래머스
코딩 테스트2026-07-28

연속된 부분 수열의 합

비내림차순으로 정렬된 수열 sequence와 목표 합 k가 주어진다 합이 k인 연속 부분 수열 중 길이가 가장 짧은 것을 찾는다 길이가 같으면 시작 인덱스가 더 작은 쪽을 찾는다 처음에는 모든 구간의 합을 완전탐색으로 구해서 k와 비교하면 되겠다고 생각했다.

JAVA 프로그래머스
코딩 테스트2026-07-28

수식 복원하기

덧셈 또는 뺄셈 수식이 문자열 배열 expressions로 주어진다 사용된 진법은 2 ~ 9진법 중 하나이지만 어떤 진법인지는 알 수 없다 결괏값이 X로 지워진 수식의 값을 채워 넣는다.

JAVA 프로그래머스
코딩 테스트2026-07-28

호텔 대실

예약 시간이 담긴 2차원 배열 book_time이 주어진다 퇴실 후 10분간 청소를 해야 다음 손님을 받을 수 있다 필요한 최소 객실 수를 구한다 처음에는 예약을 시간 순으로 정렬한 뒤, 새 예약이 들어올 때마다 이미 사용 중인 객실을 하나씩 비교해서 겹치지 않는 방이 있는지…

JAVA 프로그래머스
코딩 테스트2026-07-28

요격 시스템

폭격 미사일의 x 좌표 범위가 개구간 (s, e)로 주어진다 요격 미사일 하나는 특정 x 좌표에 걸쳐있는 모든 폭격 미사일을 관통해서 요격한다 모든 폭격 미사일을 요격하는 데 필요한 최소 요격 미사일 수를 구한다 처음에는 모든 폭격 미사일 쌍을 비교해서 겹치는 것끼리 묶으면…

JAVA 프로그래머스
코딩 테스트2026-07-28

뒤에 있는 큰 수 찾기

정수 배열 numbers가 주어진다 각 원소에 대해 자신보다 뒤에 있으면서 더 큰 값 중 가장 가까운 수를 찾는다 그런 수가 없으면 -1을 담는다 처음에는 각 원소마다 자신보다 뒤에 있는 원소들을 순서대로 훑으면서 처음 만나는 더 큰 값을 찾으면 되겠다고 생각했다.

JAVA 프로그래머스
코딩 테스트2026-07-28

퍼즐 게임 챌린지

퍼즐을 순서대로 풀며, 숙련도 level이 난이도 diff보다 낮으면 diff - level번 틀린다 한 번 틀릴 때마다 현재 퍼즐 시간 time_cur과 이전 퍼즐 시간 time_prev를 합쳐서 소비한다 모든 퍼즐을 limit 시간 안에 풀 수 있는 최소 level을…

JAVA 프로그래머스
코딩 테스트2026-07-28

동영상 재생기

"prev"는 재생 위치를 10초 전으로, "next"는 10초 후로 이동시키는 명령 10초 미만에서 prev를 하면 처음(0분 0초)으로, 남은 시간이 10초 미만에서 next를 하면 끝(video_len)으로 이동 현재 위치가 오프닝 구간(op_start ≤ 위치 ≤…

JAVA 프로그래머스
코딩 테스트2026-07-28

수레 움직이기

n x m 격자에 빨간 수레와 파란 수레가 각자의 도착 칸까지 이동해야 함 매 턴마다 두 수레를 모두 상하좌우로 한 칸씩 움직여야 하고, 벽·자신이 방문했던 칸으로는 이동 불가 도착한 수레는 그 칸에 고정, 두 수레가 같은 칸으로 이동하거나 자리를 맞바꾸는 것도 불가 격자…

JAVA 프로그래머스
코딩 테스트2026-07-28

카펫

중앙은 노란색, 테두리 1줄은 갈색인 격자 카펫에서 갈색 칸 수 brown, 노란색 칸 수 yellow가 주어짐 카펫의 가로, 세로 크기를 순서대로 배열에 담아 반환 가로 길이는 세로 길이와 같거나 더 김 brown은 8 이상 5,000 이하, yellow는 1 이상…

JAVA 프로그래머스
코딩 테스트2026-07-28

소수 찾기

한 자리 숫자가 적힌 종이 조각들을 이어 붙여 만들 수 있는 수 중 소수의 개수를 구하는 문제 문자열 numbers의 길이는 1 이상 7 이하 종이 조각을 일부만 사용해도 되고, 순서를 바꿔서 붙여도 됨 "011"과 11처럼 앞에 0이 붙어 같은 값이 되는 경우는 하나로 취급

JAVA 프로그래머스
코딩 테스트2026-07-28

붕대 감기

bandage는 [시전 시간 t, 초당 회복량 x, 추가 회복량 y]로 이루어진 배열 t초 연속으로 붕대를 감는 데 성공하면 y만큼 체력을 추가로 회복 몬스터의 공격을 받으면 연속 성공이 초기화되고, 공격당하는 순간에는 회복할 수 없음 체력은 최대 체력을 넘을 수 없고, 0…

JAVA 프로그래머스
코딩 테스트2026-07-28

베스트앨범

장르별로 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시 많이 재생된 장르부터, 장르 내에서는 재생 횟수가 많은 노래부터 수록 재생 횟수가 같으면 고유 번호가 낮은 노래를 먼저 수록 genres, plays의 길이는 1 이상 10,000 이하, 장르 종류는 100개 미만

JAVA 프로그래머스
Spring Boot2026-05-15

대규모 트래픽 경험기 - 대기열

이전 글에서 Pessimistic Lock으로 동시성 문제를 해결했다. 이번에는 한 단계 앞으로 가서, "애초에 서버에 동시에 들어오는 요청 수를 제어하면 어떨까?" 라는 질문에서 출발한다. 콘서트 티켓 오픈 시간에 2000명이 동시에 좌석 조회를 요청한다고 가정하자.

JAVA Traffic
Spring Boot2026-04-11

대규모 트래픽 경험기 - 동시성 제어

현재 코드는 성능적인 문제를 어느정도 해결했지만 동시성 문제를 해결하지 못한다. 예를들어, 10명의 사람이 한 좌석에 대해 동시에 예약을 한다면 아래와 같이 10명 모두 같은 좌석을 예매할 수 있게 된다.

JAVA Traffic
코딩 테스트2026-04-05

석유 시추

1은 석유가 있는 칸, 0은 빈 땅 상하좌우로 연결된 1들은 하나의 석유 덩어리 시추관은 한 열 전체를 수직으로 관통 어떤 열이 석유 덩어리의 일부라도 지나면, 그 덩어리 전체를 획득 한 열에서 얻을 수 있는 석유량의 최댓값을 구하는 문제 처음 보면 각 열마다 시추관을 하나씩…

JAVA 프로그래머스
코딩 테스트2026-04-02

5430번 - AC

함수 R은 배열을 뒤집는 연산 함수 D는 첫 번째 원소를 버리는 연산 단, 배열이 비어 있을 때 D를 수행하면 error 주어진 함수 문자열을 순서대로 수행한 뒤 최종 배열을 출력하는 문제 처음에는 문제 설명 그대로 R이 나올 때마다 배열을 실제로 뒤집고, D가 나오면 맨 앞…

JAVA 백준
코딩 테스트2026-04-02

1966번 - 프린터 큐

여러 문서가 큐에 들어 있고, 각 문서마다 중요도가 있음 맨 앞 문서를 확인했을 때, 더 높은 중요도의 문서가 뒤에 하나라도 있으면 맨 뒤로 보냄 그렇지 않으면 바로 인쇄 특정 위치의 문서가 몇 번째로 인쇄되는지 구하는 문제 이 문제는 프린터의 동작을 그대로 구현하면 되는…

JAVA 백준
코딩 테스트2026-03-29

1158 - 요세푸스 문제

1번부터 N번까지 사람이 원형으로 앉아 있음 순서대로 K번째 사람을 제거 모든 사람이 제거될 때까지 반복 제거되는 순서를 출력하는 문제 이 문제는 원형으로 순회하면서 K번째를 제거하는 과정을 그대로 구현하면 된다.

JAVA 백준
코딩 테스트2026-03-29

2164번 - 카드2

1부터 N까지 카드가 순서대로 쌓여 있음 맨 위 카드를 버리고, 그다음 맨 위 카드를 맨 아래로 옮기는 과정을 반복 마지막에 남는 카드 번호를 구하는 문제 이 문제는 규칙을 찾기보다, 문제에서 하라는 과정을 그대로 구현하면 된다. 카드 더미에서 반복되는 동작은 두 가지다.

JAVA 백준
Spring Boot2026-02-21

대규모 트래픽 경험기 - SSE

3편에서 API를 seat-map(정적 메타)과 seat-status(동적 상태)로 분리하고, DTO 프로젝션으로 조회 비용을 줄였다. 2000명 동시 접속 기준 TPS 51 → 136, p95 36초 → 13초. 처리량 2.7배, Tail Latency 2.6배 개선이었다.

JAVA Traffic
Spring Boot2026-02-17

대규모 트래픽 경험기 - api 분리

Redis 캐시를 적용했지만 결과는 기대 이하였다. TPS 48 → 57, 평균 응답 19.2초 → 18.2초. DB 접근은 2초에 1회까지 줄였는데도 체감 성능은 거의 그대로였다. 분석 결과 병목은 이미 DB가 아니었다.

JAVA Traffic
Spring Boot2026-02-15

대규모 트래픽 경험기 - 레디스 캐싱 적용

1편에서 확인한 문제는 명확했다. 2000명이 동시에 좌석을 조회하면 TPS 51, 평균 19.2초, p95 36.2초. 서버가 처리할 수 있는 것보다 더 많은 요청이 몰리면서, 대부분의 시간이 쿼리 실행이 아니라 자기 차례를 기다리는 대기 시간으로 소비되고 있었다.

JAVA Traffic
Spring Boot2026-02-14

트래픽 경험기 – 문제 상황 관찰

백엔드 개발을 공부하면서 항상 마음에 걸리던 질문이 있었다. "나는 실제 대규모 트래픽을 겪어본 적이 있는가?" CRUD를 만들 수 있고, 트랜잭션을 이해하고, API를 설계할 수 있다. 하지만 현실의 수강신청, 콘서트 티케팅, 한정 수량 이벤트는 다르다.

JAVA Traffic
Spring Boot2026-02-14

대규모 트래픽 경험기 – 문제 상황 관찰

백엔드 개발을 공부하면서 항상 마음에 걸리던 질문이 있었다. "나는 실제 대규모 트래픽을 겪어본 적이 있는가?" CRUD를 만들 수 있고, 트랜잭션을 이해하고, API를 설계할 수 있다. 하지만 현실의 수강신청, 콘서트 티케팅, 한정 수량 이벤트는 다르다.

JAVA Traffic
코딩 테스트2026-02-13

17070번 - 파이프 옮기기 1

크기 N × N 격자에서 파이프를 이동시키는 경우의 수를 구하는 문제 파이프는 항상 2칸을 차지하며, 방향은 총 3가지 시작 상태는 (1,1) ~ (1,2) 가로 방향 파이프의 한쪽 끝이 (N, N) 에 도달하는 모든 경우의 수를 계산 처음 문제를 읽었을 때는 👉 그래프…

JAVA 백준
코딩 테스트2026-02-12

2543번 - 타일 채우기

2^N \times 2^N 크기의 정사각형 바닥과 타일을 놓을 수 없는 배수구의 위치 (x,y)가 주어짐 배수구를 제외한 나머지 모든 칸을 4가지 종류의 'ㄱ'자 모양 타일로 빈틈없이 채워야 함 각 칸에 채워진 타일의 종류를 규칙에 맞는 번호로 출력 이 문제를 처음 봤을 때는…

JAVA 정보올림피아드
코딩 테스트2026-02-11

1183번 - 동전 자판기

물건의 가격 W와 6종류의 동전(500, 100, 50, 10, 5, 1원)의 보유 개수가 주어짐 가지고 있는 동전을 조합하여 물건 값을 정확히 지불해야 함 이때, 사용하는 동전의 총 개수를 최대로 만드는 방법을 구하는 문제 이 문제를 처음 봤을 때는 문제를 잘못 읽어 최소…

JAVA 정보올림피아드
코딩 테스트2026-02-02

4256번 - 트리

이진 트리의 전위 순회(preorder) 결과와 중위 순회(inorder) 결과가 주어짐 두 순회 결과로 만들어지는 트리는 항상 유일 해당 트리의 후위 순회(postorder) 결과를 구하는 문제 노드 개수 n ≤ 1000 이 문제를 처음 봤을 때는 👉 트리를 직접 복구한…

JAVA 백준
코딩 테스트2026-02-01

14499번 - 주사위 굴리기

크기 N × M의 지도 위에서 주사위를 굴리는 시뮬레이션 문제 주사위는 동(1), 서(2), 북(3), 남(4) 방향으로 이동 이동할 때마다 이동이 유효할 때마다 주사위 윗면의 값 출력 지도를 벗어나는 명령은 무시 이 문제를 처음 봤을 때 가장 고민했던 부분은 👉 주사위…

JAVA 백준
코딩 테스트2026-01-30

15652번 - N과 M (4)

주어진 n과 m에 대해 1부터 n까지의 수로 이루어진 비내림차순 수열을 구하는 문제 수열은 m개의 숫자로 이루어져 있고, 같은 수를 여러 번 고를 수 있음 수열은 비내림차순이어야 하며, 사전 순으로 출력해야 함 이 문제는 백트래킹 기법을 사용하면 해결할 수 있다.

JAVA 백준
코딩 테스트2026-01-28

2195번 - 문자열 복사

원본 문자열 S가 주어진다. copy(s, p) 연산은 목표는 S를 이용해 문자열 P를 만드는 것 단, copy 함수 사용 횟수를 최소화해야 한다. 이 문제를 보자마자 문자열 메서드를 활용하면 충분히 해결할 수 있겠다고 생각했다. 처음에는 contains()를 사용하려 했지만,

JAVA 백준
코딩 테스트2025-11-25

가사 검색

?가 포함된 검색 문자열이 단어 목록 중 몇 개와 일치하는지 구하는 문제 ?는 알파벳 한 글자를 의미하며 앞 또는 뒤에만 연속으로 등장 예) "fro??" → "fro"로 시작하고 길이가 5인 단어 이 문제를 처음 봤을 때 제일 먼저 떠오른 건 정규식이었다.

JAVA 프로그래머스
코딩 테스트2025-11-08

지형 편집

게임 지형은 각 칸마다 정수 높이를 가지고 있음 목표 : 모든 칸의 높이를 동일하게 만들기 블록 1개를 쌓는 비용 = P 블록 1개를 제거하는 비용 = Q 최종적으로 모든 칸의 높이가 같아지도록 할 때 필요한 최소 비용을 구하는 문제 처음 보자마자 모든 칸의 높이를 하나씩…

JAVA 프로그래머스
코딩 테스트2025-11-07

기둥과 보 설치

2차원 격자 위에 기둥(0), 보(1) 를 설치/삭제한다. 설치 및 삭제는 아래 조건을 항상 만족해야만 수행된다. 기둥 설치 가능 조건 보 설치 가능 조건 즉, 설치/삭제 이후 전체 구조물이 항상 조건을 만족해야 함.

JAVA 프로그래머스
코딩 테스트2025-11-05

등산코스 정하기

산의 지점들 중 출입구 → 산봉우리 → 출입구로만 이동해야 함. 경로에서 지나는 등산로 시간 중 가장 큰 값 = intensity. 모든 산봉우리 중, intensity가 가장 작은 산봉우리를 찾는다.(동률이면 번호가 작은 것) 이 문제는 얼핏 보면 “출입구에서 각…

JAVA 프로그래머스
코딩 테스트2025-11-01

행렬과 연산

주어진 행렬 rc에 대해 두 가지 연산을 수행해야 한다. 여러 번의 연산을 순서대로 수행한 후의 행렬을 반환해야 한다. 시간 효율을 고려해야 함 — 단순 배열 기반으로 회전시키면 시간초과 발생 이 문제는 처음보자마자 배열로 행렬을 만들어서 하면 절대 안될거라고 생각했다.

JAVA 프로그래머스
코딩 테스트2025-10-30

무지의 먹방 라이브

food_times[i]는 각 음식을 먹는 데 걸리는 시간 한 번에 1초씩 먹으며, 1초가 지나면 다음 음식으로 넘어감 k초가 지나면 네트워크가 끊기는데, 그때 먹고 있던 음식 번호를 구해야 한다.

JAVA 프로그래머스
코딩 테스트2025-10-19

리틀 프렌즈 사천성

보드는 m × n 크기의 문자 격자. 각 알파벳 대문자는 정확히 2개 존재(쌍). 두 같은 알파벳은 직선으로 연결되거나 한 번만 꺾어서(L자) 연결될 수 있어야 제거 가능. 경로는 .(빈칸)은 통과 가능, *(장애물)이나 다른 알파벳은 통과 불가.

JAVA 프로그래머스
코딩 테스트2025-10-16

광고 삽입

play_time: 동영상 총 재생시간 (HH:MM:SS) adv_time: 광고 재생시간 (HH:MM:SS) logs: 시청자별 재생 구간 [시작-끝] 이 최대 30만 개 목표: 시청자 누적 재생시간 합이 최대가 되는 광고 시작 시각을 반환 (여러 곳이면 가장 빠른 시각)…

JAVA 프로그래머스
코딩 테스트2025-10-15

자물쇠와 열쇠

key는 M×M 크기의 2차원 배열 lock은 N×N 크기의 2차원 배열 열쇠를 회전 및 이동시켜 자물쇠의 홈을 돌기로 정확히 채우고, 돌기끼리 겹치지 않도록 해야 한다. 자물쇠의 모든 홈이 채워지면 true, 아니면 false를 반환한다.

JAVA 프로그래머스
코딩 테스트2025-10-15

모두 0으로 만들기

각 노드에 가중치가 있고, 간선으로 연결된 트리가 주어진다. 한 번의 연산으로 두 노드 간의 값을 주고받을 수 있다. 모든 노드의 가중치를 0으로 만드는 데 필요한 최소 연산 횟수를 구하는 문제.

JAVA 프로그래머스
코딩 테스트2025-10-14

디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있다. 디스크 컨트롤러는 다음과 같은 우선순위로 작업을 처리한다: 모든 작업의 평균 반환 시간(요청~완료까지의 시간) 의 정수 부분을 구하라. 이 문제는 보자마자 우선순위 큐를 써야겠다는 생각이 들었다.

JAVA 프로그래머스
코딩 테스트2025-10-13

파괴되지 않은 건물

N x M 크기의 보드(board) 가 있으며, 각 칸에는 건물의 내구도(정수) 가 있음 적과 아군이 번갈아가며 직사각형 영역에 스킬(skill)을 사용함 모든 스킬이 적용된 후, 파괴되지 않은 건물)의 개수를 구해야 함 이 문제는 보고 2차원 누적합을 사용해야 하나?

JAVA 프로그래머스
코딩 테스트2025-10-13

부대복귀

지도에는 1부터 n까지 번호가 붙은 지역이 존재하며, 각 지역은 양방향 도로(roads) 로 연결되어 있음 각 도로는 통과하는 데 걸리는 시간이 모두 1로 동일함 강철부대 본부가 위치한 지역 번호는 destination 여러 명의 부대원이 각각 다른 지역(sources)에서…

JAVA 프로그래머스
코딩 테스트2025-10-12

표 편집

0 ~ n-1 행으로 이루어진 표가 있고, 처음 선택된 행은 k 명령어 목록 cmd가 주어지며 한 번에 한 행만 선택됨, 표 범위를 벗어나는 이동은 주어지지 않음 지원 명령: 모든 명령 수행 후, 처음 표(0 ~ n-1) 기준으로 삭제되지 않은 행은 O, 삭제된 행은 X 로…

JAVA 프로그래머스
코딩 테스트2025-10-11

2차원 동전 뒤집기

이 문제를 보면서 꽤 오랜시간 풀이 방향성을 고민해보았다. 그러다가 든 생각이 초기 상태와 목표 상태의 차이를 구해보는 것이다. 즉, 각 위치의 동전이 서로 다른 경우를 1, 같은 경우를 0으로 표시하여 뒤집어야 하는 위치를 구분하였다.

JAVA 프로그래머스
코딩 테스트2025-10-09

등대

1부터 n까지 번호가 매겨진 등대가 있고, 등대들을 잇는 뱃길이 n-1개 주어짐 (그래프는 트리) 일부 등대를 켜서 운영하려 함 모든 뱃길(간선)에 대해 해당 뱃길의 양 끝 등대 중 적어도 하나는 켜져 있어야 함 위 조건을 만족하도록 켜야 하는 등대의 최소 개수를 구하기 이…

JAVA 프로그래머스
코딩 테스트2025-10-08

연속 펄스 부분 수열의 합

정수 수열 sequence가 주어짐 연속된 일부 구간(부분 수열)을 선택하고 같은 길이의 펄스 수열을 각 원소에 곱함 펄스 수열은 두 가지 형태 중 하나 곱셈 결과로 만들어진 연속 펄스 부분 수열의 합 중 가장 큰 값을 구하기 처음 이 문제를 보고 부분 합을 구해야겠다는…

JAVA 프로그래머스
코딩 테스트2025-10-07

N으로 표현

숫자 N(1~9) 과 목표값 number(1~32,000) 가 주어짐 N과 사칙연산(+, -, ×, ÷) 및 괄호만을 사용하여 number를 만들어야 함 N을 이어붙인 수(예: 5, 55, 555 등) 도 사용할 수 있음 각 표현식에서 사용된 N의 개수를 계산하여 단,…

JAVA 프로그래머스
코딩 테스트2025-10-06

가장 긴 팰린드롬

문자열 s(길이 2,500 이하, 소문자만) 이 주어짐 앞뒤가 같은 부분 문자열(팰린드롬) 중 가장 길이가 긴 것의 길이를 구해야 함 즉, s의 부분문자열 중에서 좌우 대칭이 되는 가장 긴 구간의 길이를 찾는 문제 이 문제는 처음보고 푼 방식이 순차탐색이었다.

JAVA 프로그래머스
Spring Boot2025-06-03

유저 신고 기능을 위한 Redis 채팅 로그 관리

게임 내 실시간 채팅 기능을 제공하면서, 유저 신고 기능도 자연스럽게 필요해졌다. 단순히 채팅 한 줄만 저장해서 신고하는 방식은 정확한 맥락 파악이 어렵기 때문에, 신고된 메시지를 기준으로 앞뒤의 대화 흐름까지 함께 저장하는 구조가 필수적이었다.

JAVA
코딩 테스트2025-05-28

24042번 - 횡단보도

N개의 지역(1번부터 N번까지)이 있고, 이들을 잇는 M개의 횡단보도가 있음 각 횡단보도는 1분간 파란불이 들어오고, M분 주기로 반복됨 i번째 입력은 i, i+M, i+2M, ...

JAVA 백준
코딩 테스트2025-05-09

지형 이동

N x N 크기의 격자 지형이 주어짐. 각 칸은 높이를 나타내는 숫자를 가짐 상, 하, 좌, 우로 이동 가능하며, 인접 칸의 높이 차가 height 이하일 경우 사다리 없이 이동 가능 높이 차가 height를 초과하면 사다리를 설치해야 하며, 비용은 두 칸의 높이 차와 같음…

JAVA 프로그래머스
코딩 테스트2025-04-30

억억단을 외우자

억억단은 i × j로 구성된 곱셈표 (1억 × 1억 크기) 어떤 수 n의 등장 횟수 = n의 약수 쌍 개수 정수 e와 여러 개의 starts[]가 주어짐 각 start s에 대해 [s, e] 범위에서 가장 많이 등장한 수를 구함 등장 횟수가 같으면 더 작은 수 선택 이 문제는…

JAVA 프로그래머스
Spring Boot2025-04-18

Spring Boot에서 JWT + Redis로 게스트 로그인 시스템 구현하기

이번에 웹게임 프로젝트를 진행하면서 비회원도 게스트 계정으로 게임을 플레이할 수 있게 하는 기능이 필요했다. 따라서 평소엔 항상 회원만 관리했지만 이번에는 비회원을 관리하는 로직이 필요해졌다. 하지만 구글링을 해도 내가 원하는 방식의 게스트 로그인은 보이지 않았다.

JAVA
코딩 테스트2025-04-11

메뉴 리뉴얼

이 문제는 처음 보고 dp로 풀어야 하나? 라고 고민했었는데 아무리 생각해도 풀이법이 떠오르지 않았다. 그래서 조합을 생각했는데 조합으로 해도 경우의 수가 엄청나게 많아지지는 않는 것 같아서 조합으로 풀게 되었다.

JAVA 프로그래머스
코딩 테스트2025-04-10

당구 연습

처음에는 어떻게 풀어야지? 라는 생각이 계속 들었는데 문제를 읽다보니 입사각과 반사각이 같다는 걸 보고 그냥 대칭이동 시키면 되지 않을까? 라는 생각으로 접근했다. 예를 들어, 아래와 같은 상황이 있다면 여기서 흰공이 검은공을 맞출 수 있는 경우는 아래와 같이 4가지 경우이다.

프로그래머스 JAVA
코딩 테스트2025-03-30

완전범죄

문제를 읽고나서 바로 이건 조합으로 풀면 안되겠다 라고 생각했지만 생각나는 풀이 방법이 이거 밖에 없어서 일단 코드를 짰다. 당연하게도 시간초과가 나고 40점을 받았다. 뭔가 dp로 해야된다는건 알겠는데 풀이방법을 모르겠다. 그래서 결국 검색찬스를 썼다.

JAVA 프로그래머스
코딩 테스트2025-03-19

10868번 - 최솟값

이 문제는 모의 코테를 하면서 세그먼트 트리라는 소리를 듣자마자 가볍게 패스했던 문제였다. 세그먼트 트리를 한번도 배워본적이 없어서 이번 기회에 새롭게 공부를 해봤다. 세그먼트 트리는 여러 개의 데이터가 존재할 때 특정 구간의 합(최솟값, 최댓값, 곱 등)을 구하는 데…

JAVA 백준
코딩 테스트2025-03-07

카카오 프렌즈 컬러링북

프로그래머스 카카오 프렌즈 컬러링북 JAVA 풀이 과정과 코드를 정리했습니다.

JAVA 프로그래머스
코딩 테스트2025-02-17

20293번 - 연료가 부족해

처음에는 간단한 dfs 문제라고 생각하고 dfs로 코드를 짰다 초기 위치에서 가지고 있는 연료(have)와 필요한 연료(need)를 둘 다 0으로 초기화하고, dfs로 탐색하면서 각 위치에 따라 have가 있다면 다음 위치로 이동하며 have를 1 차감하고, have가…

JAVA 백준
코딩 테스트2025-02-06

길 찾기 게임

프로그래머스AI 추천문제를 계속 풀던 중에 정답률이 꽤 낮아보여서 풀게되었는데 문제를 처음 읽었을 때 생각보다 어려운 문제구나 싶었다. 근데 문제를 자세히 읽어보니 그냥 노드 클래스를 만들어서 트리를 만들어주면 되는 간단한 문제였다.

JAVA 프로그래머스
코딩 테스트2025-01-14

미로 탈출 명령어

처음에는 bfs, dfs로 경로 탐색하면 되는거 아닌가? 라고 생각하고 단순하게 풀었다. 나는 dfs로 d → l → r → u 순으로 탐색하면서 k번의 이동으로 목적지 까지 가면 무조건 사전순으로 빠른 경로가 나온다는 생각으로 문제를 풀었다. 근데 그렇게 하면 당연하게?

JAVA 프로그래머스
코딩 테스트2025-01-09

인사고과

이 문제는 프로그래머스에서 레벨3 중에 좀 그나마 쉬워보여서 선택했다. 일단 재활훈련이 시급하기 때문에.. 처음에는 그냥 두 점수의 합을 기준으로 정렬을 해서 그냥 완호의 석차만 계산해주면 되는거 아닌가? 라는 생각으로 코드를 짰다.

JAVA 프로그래머스
코딩 테스트2025-01-01

17182번 - 우주 탐사선

처음에는 그냥 플로이드로 모든 경로의 최단 거리를 구하고 각 위치에서 가지 않은 행성 중 최단 거리인 행성을 골라서 가는 방식으로 문제를 풀었다. 플로이드 함수 최단 거리 계산 근데 이건 아주 잘못된 접근이었다.

JAVA 백준
코딩 테스트2024-11-26

14863번 - 서울에서 경산까지

문제를 읽자마자 dp로 풀어야겠구나 라는 생각은 했는데, 어떻게 풀어야하나 고민을 했다. 근데 N과 K가 각각 최대 100과 100,000 이었기 때문에 2차원 배열로 해서 전체 탐색을 해도 시간 안에 충분히 할 수 있겠다 라는 생각이 들었다.

JAVA 백준
코딩 테스트2024-11-20

10159번 - 저울

무게가 서로 다른 N개의 물건이 있다. 일부 물건 쌍에 대한 저울의 결과를 가지고 있다. 각 물건에 대해 그 물건과 비교 결과 알 수 없는 물건의 개수 출력 백준을 대략 한달만에 푸는거라 재활 훈련 차 조금 쉬운 문제를 가져왔다. 처음에는 Union-Find로 풀어야하나?

JAVA 백준
Spring Boot2024-10-09

MySQL LIKE 대신 Full-Text Index 쓰는 이유

이번에 데이터베이스 수업을 듣는 중에 LIKE를 배우다가 교수님께서 검색기능에 LIKE를 쓰는건 아주 멍청한 짓이다 라는 말을 듣고 아차! 싶었다. 우리가 개발 중인 서비스에서 교수님이 하지말라던 코드와 일치하는 코드를 사용하고 있었다.

JAVA
코딩 테스트2024-10-09

2157번 - 여행

N개의 도시 중 M개 이하의 도시를 여행한다. 반드시 1번에서 시작해 N번에서 끝나야 한다. 오름차순으로 이동한다. 기내식 점수의 총합이 최대가 되도록 한다. 처음에 문제를 보고 bfs인가? dp인가? 약간 고민을 했다.

JAVA 백준
Spring Boot2024-10-03

Spring SSE로 실시간 알림 구현하기

SSE는 Server Sent Events 라는 뜻으로 말그대로 서버에서 이벤트를 보내준다 라는 의미이다. 저번시간에 정ㅇㅇ군의 발표에서 봤듯이 통신에는 여러 방식이 있다. 여기서 SSE는 스트리밍과 가장 유사하다고 할 수 있다.

JAVA
코딩 테스트2024-10-01

2011번 - 암호코드

A를 1, B를 2와 같이 Z까지 암호화를 한다. 암호화된 문장을 보고 해석할 수 있는 경우의 수를 구한다. 이 문제는 딱 보자마자 dp로 풀어야 겠구나 라는걸 알 수 있었다.

JAVA 백준
코딩 테스트2024-09-26

거스름돈 계산하기 2

정답률 34% · 제출 112회 · 예상 소요 시간 60분 곰돌이는 코드트리 마트에서 현재 일 하고 있습니다. 코드트리 마트에는 현재 N 가지의 동전들을 가지고 있고, 각 동전은 Ai​ 개를 가지고 있습니다.

JAVA 프로그래머스
Spring Boot2024-09-18

REST API가 RESTful하지 않은 이유

우리는 웹 개발을 하면서 REST라는 것을 많이 접하게 된다. 우리는 REST를 대략 아래처럼 생각하고 있을 것이다. HTTP URI를 통해 자원을 명시한다. HTTP Method를 통해 행동을 명시한다. 서버는 클라이언트가 보낸 요청에 의한 응답을 보낸다.

JAVA
코딩 테스트2024-09-12

21606번 - 아침 산책

서현이는 아침 산책을 한다. N개의 장소를 N-1 개의 길의 트리로 나타낸다. 각 장소는 실내와 실외로 나눠진다. 시작점과 도착점은 실내로 해야한다. 경로의 중간에 실내가 있으면 안된다. 서로 다른 산책 경로가 몇 가지가 있을까?

JAVA 백준
Spring Boot2024-09-11

Spring API 성능 최적화 — 병렬 처리, 트랜잭션 분리, 캐시 적용

우리가 현재 개발하고 있는 서비스들은 사용자가 적고, 규모도 작기 때문에 API 성능에 대해 큰 고민을 하지 않고 개발을 하게 된다. 하지만 사용자 수가 증가하고, 규모가 커지면서 원래는 빠르던 API들이 점점 느려질 수 있다고 한다.

JAVA
Spring Boot2024-09-04

Java에서 null을 안전하게 다루는 방법

의미가 모호함. 모든 참조의 기본이 null이고, null이 가능함. 1000여 개의 어플리케이션의 소프트웨어 결함 중 두번째로 많은 것이 Null Pointer Exception 이라고 한다. 이런 NPE 는 개발자의 부주의로 대부분 발생하게 된다.

JAVA
코딩 테스트2024-09-03

11066번 - 파일 합치기

여러 개의 파일을 합쳐 하나의 파일을 만들려고 한다. 파일을 합치는 최소 비용을 구하라. 이 문제를 보자마자 우리가 알고리즘 시간에 배웠던 허프만 트리가 생각났다. 그래서 바로 우선순위 큐로 코드를 쉽게 짤 수 있었다.

JAVA 백준
Spring Boot2024-08-26

Spring JPA Soft Delete : @SQLDelete, @Where, @SoftDelete

이번에 소공을 하면서 삭제와 관련된 이야기를 한 적이 있는데 관련된 자료들을 찾다가 우리가 얘기하던 주제와는 관련이 없지만 Soft Delete라는 것을 알게 되었다. 삭제에는 크게 두가지 종류가 있다고 한다.

JAVA
코딩 테스트2024-08-26

12781 - PIZZA ALVOLOC

도윤이는 친구 3명과 함께 피자를 나눠 먹는다. 피자는 항상 볼록 다각형이다. 피자를 네등분해서 나눠 먹는다. 나누어진 피자가 4조각이 되는지 판단하자. 이 문제는 저번 시간에 발표했던 CCW를 활용하는 문제이다.

JAVA 백준
코딩 테스트2024-08-19

11758번 - CCW

3 점 P1, P2, P3가 주어진다. P1, P2, P3를 순서대로 이은 선분이 반시계 방향을 나타내면 1 시계방향이면 -1 일직선이면 0 을 출력한다. 처음에는 이 문제를 보고 기울기를 활용해서 푸는거 아닌가? 라는 생각으로 접근했다.

JAVA 백준
코딩 테스트2024-08-12

다단계 칫솔 판매

트리의 형태로 다단계 판매가 형성되어 있다. 각 판매원은 자신에게 발생하는 이익의 10%를 추천인에게 배분하고 나머지를 가진다. 각 판매원의 이익을 계산하라. 해당 문제는 2021 백엔드 개발자를 위한 코테 문제였다.

JAVA 프로그래머스
Spring Boot2024-08-11

Spring 서비스 간 의존, 어디까지 허용될까? Service vs Repository vs Facade

스프링으로 개발을 하다보면 아래와 같은 상황이 자주 생길 것이다. Post라는 글을 처리하는 비즈니스 로직에서 User를 처리해야할 경우와 같이 서로 다른 도메인을 건드려야하는 경우이다. 이때 우리는 크게 3가지 방법을 사용할 수 있다.

JAVA
코딩 테스트2024-08-06

10942번 - 팰린드롬?

홍준이가 자연수 N개를 칠판에 적는다. 명우에게 질문을 총 M번 한다. 질문은 두 정수 S, E (1 ≤ S ≤ E ≤ N)로 나타낸다. S번째 수부터 E번째 수까지 팰린드롬을 이루는지 확인한다.

JAVA 백준
Spring Boot2024-08-05

Spring Data JPA 페이징 : Page, Slice, List 차이와 사용법

페이징은 사용자가 데이터를 요청했을 때, 전체 데이터 중 일부를 원하는 정렬 방식으로 보여주는 방식이다. 만약 페이징을 사용하지 않고 수많은 데이터를 한번에 클라이언트로 보내게 된다면 성능에 큰 문제가 생길 수 있을 것이다.

JAVA
Spring Boot2024-07-29

Spring 의존성 주입 방식 정리: 필드 주입 vs 생성자 주입 vs 수정자 주입

우리가 스프링을 공부하다보면 아래와 같은 의존성 주입을 사용하지 말라는 말을 많이 듣는다. 위와 같은 의존성 주입법을 필드 주입이라고 한다. 그렇다면 왜 이런 주입법을 사용하지 말라고 하는걸까? 의존성 주입의 종류에는 크게 3가지 방법이 있다.

JAVA
코딩 테스트2024-07-28

11401번 - 이항 계수 3

자연수 N과 정수 K가 주어졌을 때 이항계수를 1,000,000,007로 나눈 나머지를 구해라 1 ≤ N ≤ 4,000,000 0 ≤ K ≤ N 이 문제는 알고리즘 시간때 배웠던 dp 알고리즘으로 풀면 되는 아주 간단한 문제 아닌가? 하고 신나게 바로 풀기 시작했다.

JAVA 백준
Spring Boot2024-07-23

Spring Boot 테스트 코드 작성법 정리 (JUnit, AssertJ, Given-When-Then)

아직 시큐리티 부분을 제대로 파지 못한 관계로 딱히 새롭게 배운 점은 없는 것 같다. 사실 지금까지 스프링을 하면서 테스트 코드를 제대로 작성해본 적이 거의 없는데, 이번에 새로 공부하면서 테스트 코드를 작성하는 법도 새롭게 공부할 수 있었다.

JAVA
코딩 테스트2024-07-22

1655번 - 가운데를 말해요

N 개의 수를 외친다. 정수를 하나씩 외칠때마다 지금까지 말한 수 중 중간값을 말해야한다. 외친 수가 짝수 개라면 중간에 있는 두 수 중 작은 수를 말한다. 처음에는 그냥 막무가내로 정렬을 해서 가운데 출력하면 되는거 아닌가?

JAVA 백준
코딩 테스트2024-07-13

1956번 - 운동

V 개의 마을과 E 개의 도로로 구성된 도시가 있다. 도로를 따라 운동을 하기위한 경로를 찾는다. 사이클을 찾되 길이의 합이 최소가 되도록 한다. 경로를 찾을 수 없는 경우 -1을 출력한다.

JAVA 백준
코딩 테스트2024-07-09

4195번 - 친구 네트워크

어떤 사이트의 친구 관계가 생긴 순서대로 주어진다. 두 사람의 친구 네트워크에 몇 명이 있는지 구하라. 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에 친구 관계의 수 F ( ≤ 100,000) 가 주어진다.

JAVA 백준
코딩 테스트2024-07-09

1197번 - 최소 스패닝 트리

그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하라 정점의 개수 V (1 ≤ V ≤ 10,000) 간선의 개수 E (1 ≤ E ≤ 100,000) E 개의 줄에 각 간선에 대한 정보 A, B, C 가 주어진다.

JAVA 백준
코딩 테스트2024-07-03

10830번 - 행렬 제곱

크기가 N * N인 행렬 A가 있다. A의 B제곱을 구하라. 각 원소를 1,000 으로 나눈 나머지를 출력한다. 2 ≤ N ≤ 5 1 ≤ B ≤ 100,000,000,000 옛날에 풀려고 문제를 읽었다가 B의 범위를 보고 바로 도망쳤던 문제이다.

JAVA 백준
코딩 테스트2024-05-15

1774번 - 우주신과의 교감

황선자씨는 N-1명의 우주신과 교감을 할 수 있다. 황선자씨나 우주신들이 연결된 통로 M개가 존재한다. 아직 연결되지 않은 우주신들이 연결되기 위해 필요한 통로의 최소 길이를 구하라 문제를 읽다가 재밌어 보여서 풀기 시작했는데 풀다 보니 얼마 전에 알고리즘 수업 시간에 배웠던…

JAVA 백준
코딩 테스트2024-05-14

17845번 - 수강 과목

첫줄에 최대 공부시간 N, 과목수 K가 주어진다. K개의 줄에 중요도, 필요한 공부시간이 주어진다. 공부 시간의 한계를 초과하지 않으며 과목의 중요도 합이 최대가 되도록 선택해서 수강하자.

JAVA 백준
코딩 테스트2024-04-03

23631번 - 진심 좌우 반복뛰기

진심 좌우 반복뛰기한 거리의 총합이 Nm이상이면 “대머리”가 된다 진심 좌우 반복뛰기는 처음 x=0에서 시작 오른쪽으로 Km 뛴 다음 방향을 바꾼다. 대머리가 되지 않기 위해 (N-1)m만큼만 뛴다.

JAVA 백준
코딩 테스트2024-03-26

1446번 - 지름길

지름길의 개수 N, 고속도로의 길이 D가 주어진다 N은 12 이하인 양의 정수 D는 10,000보다 작거나 같은 자연수 N개의 지름길의 시작위치, 도착위치, 길이가 주어진다. D까지 이동하기 위한 거리의 최솟값을 구하라 이 문제는 딱 봐도 다익스트라로 푸는 문제인 것 같다.

JAVA 백준
코딩 테스트2024-03-19

10819번 - 차이를 최대로

N개의 정수가 주어진다. 정수의 순서를 바꿔서 아래 식의 최댓값을 구하라 |A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]| 이 문제는 오랜만에 자바로 알고리즘 과제를 하려고 하니 머리가 하얘져서 자바로 백준을 좀 풀어봐야겠다는…

JAVA 백준