본문 바로가기

전체 글115

[코딩테스트] programmers - 조이스틱 - Java Greedy 알고리즘과 최소 이동 경로 [코딩테스트] programmers - 조이스틱 - Java Greedy 알고리즘과 최소 이동 경로1. 문제 소개문제 출처: 프로그래머스 - 조이스틱문제 유형: Greedy (그리디 알고리즘)핵심 개념: 문자 변경 최소화, 좌우 이동 경로 최적화조이스틱을 이용해 모든 문자가 A인 문자열을 목표 문자열로 변경해야 합니다.조이스틱은 다음 두 가지 조작을 할 수 있습니다.상하 이동: 현재 문자를 알파벳의 다음 또는 이전 문자로 변경합니다.좌우 이동: 문자열에서 다음 문자 위치로 이동합니다. 문자열의 양 끝은 연결되어 있어 맨 앞에서 왼쪽으로 이동하면 맨 뒤로 이동합니다.목표 문자열을 완성하기 위해 필요한 조이스틱 조작 횟수의 최솟값을 구해야 합니다.2. 문제 해결 전략이 문제는 조작을 크게 두 가지로 나누어 .. 2026. 10. 17.
[코딩테스트] programmers - 프로세스 - Java Queue와 우선순위 큐 활용 [코딩테스트] programmers - 프로세스 - Java Queue와 우선순위 큐 활용1. 문제 소개문제 출처: 프로그래머스 - 프로세스난이도: Level 2알고리즘 유형: 큐(Queue), 시뮬레이션이 문제는 여러 프로세스가 대기 중일 때 주어진 실행 규칙에 따라 특정 프로세스가 몇 번째로 실행되는지 구하는 문제입니다.프로세스는 다음 규칙에 따라 처리됩니다.대기 중인 프로세스 중 현재 프로세스보다 우선순위가 높은 프로세스가 있으면 현재 프로세스를 큐의 뒤로 보냅니다.그렇지 않으면 현재 프로세스를 실행합니다.실행된 프로세스는 대기 큐에서 제거됩니다.주어진 location에 해당하는 프로세스가 몇 번째로 실행되는지 반환해야 합니다.2. 문제 예제다음과 같은 입력이 주어졌다고 가정하겠습니다.int[] p.. 2026. 10. 16.
[코딩테스트] programmers - 전력망을 둘로 나누기 - DFS와 재귀 호출 이해하기 [코딩테스트] programmers - 전력망을 둘로 나누기 - DFS와 재귀 호출 이해하기1. 문제 소개문제: 프로그래머스 - 전력망을 둘로 나누기알고리즘: 그래프(Graph), 깊이 우선 탐색(DFS)이 문제는 여러 송전탑이 전선으로 연결된 전력망에서 전선 하나를 끊어 두 개의 네트워크로 나누고, 두 네트워크에 속한 송전탑 개수의 차이가 최소가 되는 경우를 찾는 문제다.전선은 방향이 없는 연결이므로 모든 송전탑은 양방향으로 이동할 수 있다.예를 들어 다음과 같이 5개의 송전탑이 연결되어 있다고 가정하자.1 ─ 2 ─ 3 ─ 4 │ 5여기서 2번과 3번 송전탑 사이의 전선을 끊으면 다음과 같이 두 개의 네트워크로 나뉜다.1 ─ 2 3 ─ 4 │ .. 2026. 10. 16.
[코딩테스트] programmers - 피로도 - DFS와 백트래킹, visited 복구 이해하기 [코딩테스트] programmers - 피로도 - DFS와 백트래킹, visited 복구 이해하기1. 문제 개요프로그래머스의 피로도(Lv.2) 문제는 DFS와 백트래킹을 이용해 해결할 수 있는 완전 탐색 문제입니다.현재 피로도와 각 던전의 최소 필요 피로도, 소모 피로도가 주어집니다. 던전은 한 번씩만 방문할 수 있으며, 탐험할 수 있는 던전의 최대 개수를 구해야 합니다.이 문제에서 가장 중요한 부분은 다음 코드입니다.visited[i] = true;dfs( fatigue - dungeons[i][1], count + 1, dungeons);visited[i] = false;현재 던전을 방문 처리한 후 DFS를 호출하고, 재귀 호출이 끝나면 방문 상태를 복구합니다.이번 글에서는 이 코드가.. 2026. 10. 15.
[코딩테스트] programmers - 호텔 대실 - Java 풀이 및 코드 비교 [코딩테스트] programmers - 호텔 대실 - Java 풀이 및 코드 비교1. 문제 정보문제: 호텔 대실플랫폼: 프로그래머스난이도: Level 2언어: Java알고리즘: 그리디(Greedy), 정렬, 큐(Queue), 우선순위 큐(PriorityQueue)문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1556512. 문제 설명호텔 예약 정보가 담긴 2차원 배열 book_time이 주어집니다.각 예약은 입실 시각과 퇴실 시각으로 구성되어 있으며, 객실을 사용한 후에는 다음 손님을 받기 위해 퇴실 시각부터 10분간 청소해야 합니다.모든 예약을 처리하기 위해 필요한 최소 객실 수를 구해야 합니다.예를 들어 다음과 같은 예약이 있다고 .. 2026. 10. 14.
[코딩테스트] programmers - 택배상자 (Lv.2) - Stack [코딩테스트] programmers - 택배상자 (Lv.2) - Stack1. 문제 정보문제 이름: 택배상자출처: 프로그래머스난이도: Level 2사용 언어: Java핵심 알고리즘: Stack (스택)문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1317042. 문제 설명1번부터 N번까지의 택배 상자가 컨테이너 벨트를 통해 순서대로 전달된다.택배 기사님이 원하는 상자의 적재 순서는 order 배열에 주어진다.컨테이너 벨트에서는 상자를 순서대로 꺼낼 수 있다. 원하는 순서와 다른 상자는 보조 컨테이너에 보관할 수 있지만, 보조 컨테이너는 입구가 하나뿐이므로 마지막에 넣은 상자를 가장 먼저 꺼내야 한다.이러한 구조를 LIFO(Last In.. 2026. 10. 14.
[코딩테스트] programmers - 네트워크 - DFS로 연결된 컴퓨터 그룹 찾기 [코딩테스트] programmers - 네트워크 - DFS로 연결된 컴퓨터 그룹 찾기1. 문제 설명네트워크 문제는 컴퓨터 간의 연결 정보가 주어졌을 때, 네트워크가 몇 개 존재하는지 구하는 문제이다.네트워크란 컴퓨터들이 서로 연결되어 정보를 교환할 수 있는 집합을 의미한다.컴퓨터 A와 컴퓨터 B가 연결되어 있고, 컴퓨터 B와 컴퓨터 C가 연결되어 있다면 컴퓨터 A와 C가 직접 연결되어 있지 않더라도 같은 네트워크에 속한다.이 문제에서는 컴퓨터의 개수 n과 컴퓨터 간의 연결 정보를 나타내는 2차원 배열 computers가 주어진다. 연결되어 있는 컴퓨터들을 하나의 네트워크로 묶고, 전체 네트워크의 개수를 반환하면 된다.입출력 예제 n computers return 3[[1,1,0],[1,1,0],[0,.. 2026. 10. 13.
[코딩테스트] programmers - 게임 맵 최단거리 - BFS(너비 우선 탐색) Java 풀이 [코딩테스트] programmers - 게임 맵 최단거리 - BFS(너비 우선 탐색) Java 풀이1. 문제 소개게임 맵 최단거리 문제는 시작점에서 도착점까지 이동할 때 지나야 하는 칸의 최솟값을 구하는 문제다.맵은 2차원 배열로 주어지며, 각 칸은 다음과 같은 의미를 가진다.1: 이동할 수 있는 칸0: 벽이므로 이동할 수 없는 칸상하좌우로만 이동할 수 있으며, 시작점은 좌측 상단 (0, 0), 도착점은 우측 하단 (N - 1, M - 1)이다.도착점에 도달할 수 없다면 -1을 반환한다.문제 해결의 핵심이 문제는 BFS(Breadth-First Search, 너비 우선 탐색)를 사용하면 효율적으로 해결할 수 있다.BFS는 시작점에서 가까운 위치부터 차례대로 탐색하는 알고리즘이다. 모든 이동 비용이 1로 .. 2026. 10. 12.
[코딩테스트] Geometry - 사각형 둘레로 최대 좌표 개수 구하기 [코딩테스트] Geometry - 사각형 둘레로 최대 좌표 개수 구하기1. 문제 소개2차원 좌표와 사각형의 둘레가 주어졌을 때, 사각형 안에 포함할 수 있는 좌표의 최대 개수를 구하는 문제입니다.함수 시그니처는 다음과 같습니다.public int maxPointsWithPerimeter(Map2D[] map, int perimeter)입력 데이터는 다음과 같은 Map2D 클래스로 표현합니다.class Map2D { int X; int Y; Map2D(int x, int y) { this.X = x; this.Y = y; }}문제 조건좌표는 제1사분면부터 제4사분면까지 모두 사용할 수 있습니다.perimeter는 사각형의 한 변의 길이가 아니라 둘레입니다.사각.. 2026. 10. 11.
[코딩테스트] Stack - Word Machine 문제 풀이 (Java) [코딩테스트] Stack - Word Machine 문제 풀이 (Java)1. 문제 소개Word Machine은 문자열에 포함된 숫자와 명령어를 순서대로 읽고, 스택(Stack)을 이용해 연산을 수행하는 문제입니다.이 문제의 핵심은 문자열을 파싱(Parsing)하고, 각 명령어에 맞는 스택 연산을 실행한 뒤 최종 결과를 반환하는 것입니다.함수 시그니처는 다음과 같습니다.int solution(String S)입력값: 숫자와 명령어로 구성된 문자열 S반환값: 모든 명령어를 실행한 후 스택의 최상단에 남아 있는 값연산 오류가 발생하거나 최종 스택이 비어 있다면 -1 반환이 문제는 Stack, String Parsing, Simulation 유형으로 분류할 수 있습니다.2. 명령어 정의Word Machine은.. 2026. 10. 11.
[코딩테스트] Tree - 밸런스 노드 개수 구하기 [코딩테스트] Tree - 밸런스 노드 개수 구하기1. 문제 설명트리(Tree)가 주어졌을 때, 트리에 존재하는 밸런스 노드(Balanced Node)의 개수를 반환하는 문제입니다.함수 시그니처는 다음과 같습니다.int solution(Node tree)tree: 트리의 루트 노드반환값: 밸런스 노드의 개수이 문제에서는 트리 전체가 균형 잡혀 있는지 판단하는 것이 아니라, 각 노드가 밸런스 조건을 만족하는지 확인하고 그 개수를 반환해야 합니다.밸런스 노드의 조건이 문제에서는 다음 조건을 기준으로 밸런스 노드를 판단합니다.자식이 없는 노드(리프 노드)는 밸런스 노드입니다.자식이 하나인 노드도 밸런스 노드입니다.자식이 두 개 이상인 노드는 모든 자식의 직계 자식 개수가 같아야 밸런스 노드입니다.여기서 비교하.. 2026. 10. 11.
[코딩테스트] Codility - FrogRiverOne - 개구리 강 건너기 [코딩테스트] Codility - FrogRiverOne - 개구리 강 건너기1. 문제 소개문제 설명개구리는 강의 시작 위치인 0에서 반대편 위치인 X + 1로 이동하려고 한다.강을 건너려면 위치 1부터 X까지 모든 위치에 나뭇잎이 떨어져 있어야 한다.정수 배열 A에서 A[K]는 시간 K초에 나뭇잎이 떨어진 위치를 의미한다.모든 위치에 나뭇잎이 놓이는 가장 빠른 시간을 반환하는 함수를 작성한다.모든 위치가 채워지면 가장 빠른 시간 반환모든 위치가 채워지지 않으면 -1 반환예제X = 5;A = [1, 3, 1, 4, 2, 3, 5, 4];시간에 따른 나뭇잎의 위치는 다음과 같다. 초 위치 새 위치 개수 0111133221중복23443422453중복46555시간 6에 위치 1, 2, 3, 4, 5가 모.. 2026. 10. 11.
반응형