[백준/BOJ] 19237 어른 상어 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 19237 어른 상어 - JAVA문제https://www.acmicpc.net/problem/19237문제 분석조건`N×N`격자 중 M개의 칸에 상어가 한 마리씩 들어있다. 상어는 시작 위치에 냄새를 뿌린다. 모든 상어는 1초마다 상하좌우로 인접한 칸으로 이동하고, 이동한 칸에도 냄새를 뿌린다. 냄새는 `k`초 후에 사라진다.상어가 이동할 때는 현재 바라보는 방향에서 냄새가 없는 칸으로 이동한다. 인접한 칸에 이동할 수 있는 칸이 여러 군데면 우선순위를 따른다. 냄새가 없는 칸이 없다면 자신의 냄새가 있는 곳으로 이동한다. 이 역시 우선순위를 따른다.같은 칸에 상어가 여러 마리 존재할 경우 작은 번호의 상어만 남고, 나머지 상어는 없어진다.풀이방법상어 클래스를 정의하여 `상어의 위치, 번..
[프로그래머스] 12929 올바른 괄호의 갯수 - JAVA (카탈란 수)
·
알고리즘/문제풀이
[프로그래머스] 12929 올바른 괄호의 갯수 - JAVA문제https://school.programmers.co.kr/learn/courses/30/lessons/12929 문제 분석조건`n`이 주어질 때 만들 수 있는 올바른 괄호의 수를 구하는 문제이다. 올바른 괄호란 `()`, `(())`, `()()` 등 올바르게 모두 닫힌 괄호를 의미한다.카탈란 수(Catalan Number)란?이 문제는 카탈란 수를 이용하여 푸는 문제이다. 코드의 풀이보다는 이 문제에 활용되는 카탈란 수에 대해 정리하는 것이 더 중요한 것 같다. 우선 이 문제를 바탕으로 카탈란 수를 먼저 이해해 보자면,n=1일 경우는 `()`으로 1가지 방법이 존재한다.n=2: `()()`, `(())`으로 2가지가 존재하는데, 이를 그림으..
[백준/BOJ] 2206 벽 부수고 이동하기 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 2206 벽 부수고 이동하기 - JAVA문제https://www.acmicpc.net/problem/2206 문제 분석조건N×M 크기의 맵이 있다. 0은 이동할 수 있는 곳이고, 1은 벽이 있는 곳이다.`1, 1`위치에서 `N, M`위치까지 이동하는데, 최단 경로로 이동하려 한다. 이동 중 1개의 벽을 부수고 이동할 수 있을 때 최단 이동 횟수를 구하는 문제이다. 이동이 불가능할 경우 `-1`출력풀이방법기본적인 BFS를 활용한 최단경로 구하는 문제에서 벽을 1번 부술수있는부술수 있는 경우가 추가된 형태이다. 각 칸에 이동했을 때, 벽을 부술 수 있는 횟수를 포함하여 `visited`를 관리하면 되는 문제이다. `Queue`에 넣는 좌표값에도 벽을 부술수 있는 횟수를 관리하기 위해 `Nod..
[백준/BOJ] 19236 청소년 상어 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 19236 청소년 상어 - JAVA문제https://www.acmicpc.net/problem/19236문제 분석조건4×4 크기의 공간이 1×1 크기의 정사각형으로 나누어져 있다. 각 칸에는 물고기가 한 마리씩 존재하며 각 물고기는 1~16번까지 고유 번호와 (상하좌우, 대각선) 방향을 가지고 있다.청소년 상어는 `0, 0`칸에 들어가 해당 칸에 있는 물고기를 잡아먹고 해당 물고기의 방향을 갖게 된다. 그 후 물고기의 이동과 청소년 상어의 이동이 반복된다.물고기는 1번 물고기부터 본인의 방향으로 1칸 이동한다. 다만 이동할 수 없을 경우(구역 밖, 상어가 있는 칸) 반시계 방향으로 45°회전한다. 이동 가능한 칸에 다른 물고기가 있으면 해당 칸에 물고기와 자리를 바꾼다.모든 물고기의 이동..
[프로그래머스] 42628 이중우선순위큐 - JAVA
·
알고리즘/문제풀이
[프로그래머스] 42628 이중우선순위큐 - JAVA문제https://school.programmers.co.kr/learn/courses/30/lessons/42628문제 분석조건명령어 배열에 따라 우선순위 큐에 값을 넣거나 빼는 연산을 하게 된다. 모든 연산이 마쳤을 때 큐에 들어있는 값에서 `[최댓값, 최솟값]`을 출력하는 문제이다. 큐가 비어있다면 `[0, 0]`을 출력한다. 명령어는 아래와 같다.`I 숫자` ➡️ 숫자를 큐에 삽입`D 숫자` ➡️ 숫자가 1이면 최댓값, -1이면 최솟값 삭제풀이방법자동으로 정렬이 되는 `TreeMap`을 사용하였다. 키값을 기준으로 자동으로 정렬되고 첫 번째 키값이나 마지막 키값을 알 수 있기 때문에 단순 구현으로 문제를 풀 수 있다. 키값을 가져올 때 `Tree..
[프로그래머스] 64064 불량 사용자 - JAVA
·
알고리즘/문제풀이
[프로그래머스] 64064 불량 사용자 - JAVA문제https://school.programmers.co.kr/learn/courses/30/lessons/64064문제 분석조건불량 사용자 목록이 주어진다. 불량 사용자 아이디의 일부 문자가 `*`로 마스킹된 형태로 주어질 때, 사용자 아이디 중 불량 사용자 목록에 주어진 패턴들과 매칭될 수 있는 유저 아이디조합의 경우의 수를 구하는 문제이며, 같은 조합의 경우 1가지로 계산한다.풀이방법`banned_id`에 포함된 `*`문자를 `.`으로 바꾸어 정규표현식을 활용할 수 있도록 하였다. 조합을 구할 때처럼 user_id 중 정규식에 맞는 조합으로 탐색하였으며 중복된 조합을 제거하기 위해 `Set`을 사용하였다.코드import java.util.*;clas..