알고리즘 27

[프로그래머스] 안전지대 - JAVA 풀이

프로그래머스 - 안전지대문제 설명다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.제한사항board는 n * n 배열입니다.1 ≤ n ≤ 100지뢰는 1로 표시되어 있습니다.board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.입출력 예아이디어board[i][j] 의 상하좌우, 대각선 상하좌우에 값을 1로 변환한 뒤 0의 갯수를 리턴한다테두리 경계값에 걸칠때 ..

알고리즘 2024.10.11

[LEETCODE] 706. Design HashMap

리트코드 - Design HashMap문제 설명내장 해시테이블 라이브러리를 사용하지 않고 HashMap을 구현하라예시제한 사항0 At most 104 calls will be made to put, get, and remove.아이디어제한 범위가 10^6 이라 배열로 충분히 간단하게 구현이 가능하다.사이즈 1000001인 배열을 만들고 인덱스를 키값으로 구현LinkedList를 활용해서 해결이 가능하다(추후 정리)JAVA 풀이class MyHashMap { int[] m; public MyHashMap() { m = new int[1000001]; Arrays.fill(map, -1); } public void put(int key, int value) { ..

알고리즘 2024.10.09

[프로그래머스] - 숫자 변환하기 JAVA 풀이

프로그래머스 - 숫자 변환하기 JAVA 풀이문제 설명자연수x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.x에 n을 더합니다x에 2를 곱합니다.x에 3을 곱합니다.자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.제한사항1 ≤ x ≤ y ≤ 1,000,0001 ≤ n y입출력 예아이디어브루트포스로는 시간초과bfs로 해결이 가능하지만 dp가 가장 적절한 해법인듯 하다각 계산식 경우의 수 마다 비교해가면서 dp 배열 만들고 변환 불가처리만 주의하자JAVA 풀이class Solution { public int solutio..

알고리즘 2024.10.08

[프로그래머스] PCCP 기출문제 - 붕대 감기 JAVA 풀이

프로그래머스 - 붕대 감기문제 설명어떤 게임에는 붕대 감기라는 기술이 있습니다.붕대 감기는 t초 동안 붕대를 감으면서 1초마다 x만큼의 체력을 회복합니다. t초 연속으로 붕대를 감는 데 성공한다면 y만큼의 체력을 추가로 회복합니다. 게임 캐릭터에는 최대 체력이 존재해 현재 체력이 최대 체력보다 커지는 것은 불가능합니다.기술을 쓰는 도중 몬스터에게 공격을 당하면 기술이 취소되고, 공격을 당하는 순간에는 체력을 회복할 수 없습니다. 몬스터에게 공격당해 기술이 취소당하거나 기술이 끝나면 그 즉시 붕대 감기를 다시 사용하며, 연속 성공 시간이 0으로 초기화됩니다.몬스터의 공격을 받으면 정해진 피해량만큼 현재 체력이 줄어듭니다. 이때, 현재 체력이 0 이하가 되면 캐릭터가 죽으며 더 이상 체력을 회복할 수 없습니..

알고리즘 2024.10.04

[프로그래머스] 정수를 나선형으로 배치하기 JAVA 풀이

정수를 나선형으로 배치하기문제 설명양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n^2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.제한사항1 입출력 예아이디어방향을 분류(상하좌우) 한다.분류한 방향의 다음에 값이 있는지 체크, 방향 전환 처리 주의풀이class Solution { public int[][] solution(int n) { int[][] answer = new int[n][n]; int col = 0; int row = 0; // 방향 - e: 우, s: 하, w: 좌, n: 상 String direction = "e..

알고리즘 2024.10.02

[프로그래머스] PCCP 기출문제 - 동영상 재생기 JAVA 풀이

동영상 재생기문제 설명당신은 동영상 재생기를 만들고 있습니다.당신의 동영상 재생기는 10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기 3가지 기능을 지원합니다.각 기능이 수행하는 작업은 다음과 같습니다.10초 전으로 이동:사용자가 "prev" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 전으로 이동합니다. 현재 위치가 10초 미만인 경우 영상의 처음 위치로 이동합니다. 영상의 처음 위치는 0분 0초입니다.10초 후로 이동:사용자가 "next" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 후로 이동합니다. 동영상의 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동합니다. 영상의 마지막 위치는 동영상의 길이와 같습니다.오프닝 건너뛰기:현재 재생 위치가 오프..

알고리즘 2024.10.01

[BOJ-1641] 도서관 JAVA 풀이

도서관문제세준이는 도서관에서 일한다.도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다.세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다.각 책들의 원래 위치가 주어질 때, 책을 모두 제자리에 놔둘 때 드는 최소 걸음 수를 계산하는 프로그램을 작성하시오.세준이는 한 걸음에 좌표 1칸씩 가며, 책의 원래 위치는 정수 좌표이다.책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요는 없다.그리고 세준이는 한번에 최대 M권의 책을 들 수 있다.첫째 줄에 책의 개수 N과, 세준이가 한 번에 들 수 있는 책의 개수 M이 주어진다.둘째 줄에는 책의 위치가 주어진다.N과 M은 50보다 작거나 같은 자연수이다.책의 위치는 0이 아니며, 절댓값은 10,000보다 작거..

알고리즘 2024.09.30