[백준/BOJ] 20057 마법사 상어와 토네이도 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 20057 마법사 상어와 토네이도 - JAVA문제https://www.acmicpc.net/problem/20057 문제 분석조건N x N 격자의 중앙에서 시작한 토네이도가 바깥으로 나선형으로 이동한다. 토네이도가 특정 칸으로 이동하면, 그 칸의 모든 모래가 일정한 비율에 따라 주변 칸으로 흩어진다. 이때 격자 밖으로 나간 모래의 총 양을 구하는 것이 문제의 목표이다.풀이방법토네이도 클래스를 정의하여 토네이도의 위치, 방향, 상태와 이동을 다루는 변수와 함수를 작성했다.모래가 날리는 부분은 `SPREAD_PATTERN`을 3차원 배열을 통해 미리 모두 정의해두었다. 현재 방향에 맞는 패턴을 조회하여 바로 사용하도록 했다.코드import java.io.BufferedReader;import..
[백준/BOJ] 2146 다리 만들기 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 2146 다리 만들기 - JAVA문제https://www.acmicpc.net/problem/2146문제 분석조건N x N 크기의 지도에 1(육지)과 0(바다)이 주어진다. 여러 개의 섬이 있을 때, 한 섬에서 다른 섬으로 가는 가장 짧은 다리를 건설할 때 가장 짧은 다리의 길이를 구하라.풀이방법BFS를 2개 사용하는 방법으로 답을 구하였다. 처음 지도를 입력받고 모든 좌표를 탐색하며 육지일 경우 음수로 지도를 고쳐주는 BFS를 1번 사용했고, 육지에서 시작하는 BFS를 구하였다.육지에서 시작하여 다리 길이를 구하는 BFS를 구현하기 위해 count 변수를 가진 Node 클래스를 정의하였고 우선순위큐를 이용하였다. 육지 좌표 하나에서 출발하는 bfs이기 때문에 출발 위치와 가장 가까운 섬..
[백준/BOJ] 20056 마법사 상어와 파이어볼 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 20056 마법사 상어와 파이어볼 - JAVA 문제https://www.acmicpc.net/problem/14939문제 분석조건N x N 크기의 격자에서 M개의 파이어볼이 주어진 정보(위치, 질량, 속력, 방향)를 가지고 움직인다. K번의 명령을 수행하는 동안, 파이어볼은 다음과 같은 규칙에 따라 동작한다.모든 파이어볼이 자신의 방향과 속력대로 이동한다. 격자는 연결되어 있어, 1번 행의 위는 N번 행과, N번 열의 오른쪽은 1번 열과 연결된다.이동 후, 한 칸에 2개 이상의 파이어볼이 모이면 하나로 합쳐진 뒤 4개로 나뉜다.질량: (합쳐진 질량의 합) / 5속력: (합쳐진 속력의 합) / (합쳐진 파이어볼 개수)방향: 합쳐진 파이어볼들의 방향이 모두 홀수거나 짝수이면 0, 2, 4,..
[프로그래머스] 17678 [1차] 셔틀버스 - JAVA
·
알고리즘/문제풀이
[프로그래머스] 17678 [1차] 셔틀버스 - JAVA 문제https://school.programmers.co.kr/learn/courses/30/lessons/17678문제 분석조건`n`대의 셔틀이 `t`분 간격으로 운행되며 각 셔틀에는 `m`명이 탈 수 있다.셔틀은 09:00부터 운행하며 셔틀의 출발시간 전이나 정시에 도착한 사람만 탈 수 있다. 이때 '콘'이 셔틀을 탈 수 있는 가장 늦은 시간을 구하는 문제이다.풀이방법결국 '콘'은 무조건 마지막 셔틀을 타는 것인데, 이 셔틀의 상태에 의해 빈 좌석에 앉거나, 가장 마지막 탑승 인원보다 1분 빨리 줄을 서 타는 경우 2가지가 있다.마지막 셔틀을 이전 셔틀을 못 탄 인원이 탑승할 수 있기 때문에 가장 먼저 줄은 선 크루부터 모든 크루를 태워야 하기..
[프로그래머스] 42884 단속카메라 - JAVA
·
알고리즘/문제풀이
[프로그래머스] 42884 단속카메라 - JAVA 문제https://school.programmers.co.kr/learn/courses/30/lessons/42884문제 분석조건모든 차량이 고속도로를 이용하면서 한 번은 단속용 카메라를 만나도록 카메라를 설치해야 한다. 차량의 이동 경로가 `[진입 지점, 진출 지점]` 형태로 주어질 때, 모든 차량을 단속하기 위해 설치해야 할 카메라의 최소 개수를 구하는 문제이다.풀이방법그리디 문제이므로 `전출 지점`을 기준으로 정렬하였다. `전출 지점`을 기준으로 `cctv`변수로 마지막으로 설치한 카메라의 위치를 저장하고, `routes`배열을 순회하며 `전입 지점`이 마지막 카메라의 위치(`cctv`)보다 앞에 있거나 같다면 이미 단속된 차량이므로 넘어가도록 하였..
[백준/BOJ] 1806 부분합 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 1806 부분합 - JAVA문제https://www.acmicpc.net/problem/1806 문제 분석조건10,000개 이상의 자연수로 이루어진 수열에서, 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 문제풀이방법투 포인터(슬라이딩 윈도우)를 활용하여 문제를 풀었다. `end`포인터를 한칸씩 옮기며 구간 합을 계산하였고, 조건이 만족했을 때 start를 옮기며 최소 길이를 비교하였다.코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { public stati..