분류 전체보기
-
Java 25757 임스와 함께하는 미니게임PS 2023. 7. 19. 09:55
https://www.acmicpc.net/problem/25757 25757번: 임스와 함께하는 미니게임 첫 번째 줄에는 사람들이 임스와 같이 플레이하기를 신청한 횟수 $N$과 같이 플레이할 게임의 종류가 주어진다. $(1 \le N \le 100\,000)$ 두 번째 줄부터 $N$개의 줄에는 같이 플레이하고자 하는 사람들 www.acmicpc.net 풀이 : 이미 플레이한 사람의 경우에는 게임을 다시 할 수 없기에 이를 체크해주기 위해 set을 이용하여 중복된 원소가 존재하지 못하게 해줌으로써 해결할 수 있는 문제였습니다. 게임 종류별로 플레이 인원이 정해져있기에 조건문을 통해서 카운트해야할 플레이어의 수를 정해주었고 반복문을 통해 플레이어 이름을 입력받고 set에 존재하지 않는 사람이라면 set에 ..
-
Java 1389 케빈 베이컨의 6단계 법칙PS 2023. 7. 5. 13:49
https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 풀이 : 플로이드 와샬 알고리즘을 사용하여 풀이하였습니다. 다익스트라 알고리즘이 찾고자 하는 노드의 경로를 찾는 알고리즘이었다면, 플로이드 와샬 알고리즘은 모든 노드에 대한 경로를 찾는 알고리즘으로 삼중 for문을 사용하여 구현할 수 있습니다. import java.io.*; import java.util.ArrayList; import java...
-
Java 14891 톱니바퀴PS 2023. 6. 30. 01:05
https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 문제에 대한 설명이 길기에 링크를 걸어두겠습니다. 풀이 : 로직은 다음과 같다. 1. 회전할 톱니바퀴와 인접한 톱니바퀴의 값을 dfs를 통하여 회전이 필요한 경우 check 배열에 bool값을 업데이트 해준다. 2. 회전이 일어나는 톱니바퀴가 기준이 되는 톱니바퀴와의 인덱스의 차이를 구해 처음 주어진 방향과 똑같이 회전하는지 반대 방향으로 회전하는지를 구하고 회전을 시켜준다. 3. 모든 반복문..
-
Java 3190 뱀PS 2023. 6. 29. 16:07
풀이 : 핵심 로직은 아래와 같다. 1. 시작점부터 큐에 넣어서 bfs로 탐색 2. HashMap에 integer, String으로 카운트 정보와 방향 정보를 저장 3. 뱀이 현재 맵에 위치한 정보들을 LinkedList에 넣고 위치한 좌표들은 bool값을 true 변경 4. 인덱스 범위가 유효하지 않거나, bool값이 true인 경우에는 뱀이 위치한 곳이기 때문에 탐색 종료 구현은 생각보다 빨리 끝냈지만 방향회전 하는 곳을 이상하게 해놓아서 한참을 헤매었다 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.*; public class Main { static..
-
Java 16234 인구이동PS 2023. 6. 28. 16:18
풀이 : 1. 모든 좌표에 대해 bfs로 탐색을 진행한다. 2. 상,하,좌,우로 인접한 나라(원소)와의 값의 차이가 L이상, R이하이면 인구 이동이 필요한 sumQ에 좌표값을 추가해준다. 3. bfs 탐색이 종료될 경우에 sumQ의 값이 1보다 크다면 인구이동이 필요한 경우이기 때문에 인구이동을 실행한다. 4. 모든 좌표에 대한 탐색이 종료된 경우 인구이동이 일어났다면 bool값을 true로 업데이트 해준 뒤 반복문을 계속 실행하며 day 값을 1 더해준다. 핵심 로직은 위와 같이 구현하였습니다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedL..
-
Java 14502 연구소PS 2023. 5. 30. 15:55
https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로..
-
Java 2667 단지번호붙이기PS 2023. 5. 26. 12:57
풀이 : 문제를 보고 생각한 풀이는 dfs로 접근하는 것이었습니다. 지도 정보를 2차원 배열로 입력 받은 뒤, 모든 원소를 돌면서 방문한 원소가 이미 방문한 원소거나, 값이 0일 경우에는 재귀함수를 호출하지 않고, 방문하지 않았거나 값이 1일 경우에는 집의 개수를 세는 static 변수를 0으로 초기화한 뒤 재귀함수를 호출해 해당 원소의 상, 하, 좌, 우의 인접한 원소들을 검사하여 방문하지 않았거나 값이 1일 경우에는 다시 재귀함수를 호출해 집의 개수를 세어주고 함수호출이 종료되면 카운트했던 집의 개수를 ArrayList에 저장해주고 모든 원소의 탐색이 종료될 때 list의 사이즈를 출력하고 list를 오름차순으로 정렬한 값을 하나씩 출력하여 해당 문제를 풀이하였습니다. import java.io.Bu..
-
Java 1021 회전하는 큐PS 2023. 5. 22. 16:49
풀이 : 큐 자료구조는 FIFO으로 먼저 들어온 것이 먼저 나가게 된다. 문제에서는 순환하는 큐에서 찾고자 하는 최소한의 연산을 통해 찾으라고 하고 있다. LinkedList로 큐를 구현하여 원소를 회전할 때 왼쪽으로 회전해야한다면 가장 앞의 원소를 pop하고 가장 끝으로 push하는 식으로 진행하였다. 최소값을 구하는 게 문제였으니 찾고자 하는 원소의 index와 큐의 가운데 index 값을 비교하여 이보다 크면 3번 연산을 크지 않거나 같다면 2번 연산을 통하여 큐를 회전시켜주고 result를 1씩 증가하여주어 최소 연산값을 구할 수 있었다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRead..