분류 전체보기 795

백준 21608번 상어 초등학교 (JAVA)

https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 저는 각각의 빈 공간에 대해 근처에 좋아하는 학생이 몇명이 존재하는지, 빈칸은 몇개 존재하는지 확인하고 이를 비교하여 빈칸을 선택하여 해당 학생을 넣었습니다. 마지막으로 전체 배열을 돌면서 근처에 좋아하는 학생이 몇명있나 확인하고 점수를 합산하였습니다. (처음에 빈칸을 찾으면서 점수를 계산하게 되면 초반에 추가된 학생들은 좋아하는 학생의 점수를 측정하기 힘들어져서 이렇게 구현하였습니다...

알고리즘 2022.04.06

백준 20058번 마법사 상어와 파이어스톰 (JAVA)

https://www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 저는 q번 만큼 먼저 각각의 영역을 시계방향으로 90도 회전시키고, 각각의 좌표에 대해 인접한 얼음의 개수를 세고 3이하라면 이것들을 모아서 한번에 얼음을 감소시켰습니다. (체크하면서 얼음을 감소시키면 문제가 될 수 있습니다.) q번 명령을 끝내면, BFS를 통해 각각의 영역의 크기를 확인하고 이 중 가장 큰 영역을 리턴하였습니다. package BOJ.Simulation; i..

알고리즘 2022.04.05

백준 19237번 어른 상어 (JAVA)

https://www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 저는 BFS를 이용해 문제를 해결하였습니다. 저는 이동할 때 해당 좌표가 빈칸인지 또는 자신보다 값이 낮은 상어가 있는지를 확인 (번호가 낮은 순서대로 상어를 움직였습니다.)하고 그 다음에 자신의 냄새인지를 확인하였습니다. 모든 상어가 이동하고 현재의 값을 냄새를 체크하였습니다. 저는 상어가 이동하면서 현재 냄새를 남겨 계속 테스트 케이스에서 틀렸었습니..

알고리즘 2022.04.04

백준 17825번 주사위 윷놀이 (JAVA)

https://www.acmicpc.net/problem/17825 17825번: 주사위 윷놀이 첫째 줄에 주사위에서 나올 수 10개가 순서대로 주어진다. www.acmicpc.net 저는 DFS를 통해 해당 문제를 해결하였습니다. 저는 각각의 위치에서 다음의 위치로 가는 배열을 통해 경로를 어떻게 갈지 설정하였습니다. isBlue를 통해 해당 위치가 파랑색인지를 확인하고 blueDir를 통해 어디로 가는지를 설정하였습니다. DFS를 통해 각각의 말을 이동시켜보고 최대 값을 구하였습니다. package BOJ.Simulation; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer;..

알고리즘 2022.04.03

백준 15903번 카드 합체 놀이 (JAVA)

https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 저는 해당 문제를 우선순위 큐를 통해서 문제를 해결하였습니다. 우선순위 큐를 통해 가장 작은 두개를 찾고 이를 더하고 더한 값을 다시 우선순위 큐에 넣었습니다. 마지막으로 우선순위 큐가 빌때까지 poll하면서 모든 값을 더해주었습니다. package BOJ.ETC; import java.io.BufferedReader; import java.io.InputSt..

알고리즘 2022.04.02

백준 15686번 치킨 배달 (JAVA)

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 저는 맨 처음에 DFS와 BFS를 이용해 문제를 해결하였습니다. DFS를 이용해 M개의 치킨집을 선택하고 각각의 집(1)에서 BFS를 통해 각 치킨집의 최소값을 구했습니다. 이렇게 했을때 채점 기준으로 2초가 넘었습니다. 문제를 다시 보니, 각각의 집에서 BFS를 할 필요없이 처음에 각 집의 좌표를 구하고 선택한 치킨집과 좌표를 빼서 최소값을 구하면 되었습니다. 이렇게 했을때..

알고리즘 2022.04.01

백준 15685 드래곤 커브 (JAVA)

https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 저는 각각의 방향을 List에 넣고 이를 역순으로 꺼내면서 이 방향의 왼쪽 방향으로 가도록 구현하였습니다. 마지막으로 전체에서 사각형의 모든 칸이 boolean인 개수를 구하였습니다. package BOJ.Simulation; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util..

알고리즘 2022.03.31

백준 15684번 사다리 조작 (JAVA)

https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 저는 해당 문제를 DFS를 이용해 문제를 해결하였습니다. 저는 사다리가 겹치지 않기 때문에 해당 값을 방향으로 초기화하였습니다. 왼쪽으로 가야한다면 -1 , 오른쪽으로 간다면 1로 초기화하여 문제를 접근하고 사다리 내려가는 것은 해당 값을 더해가면서 맨 밑까지 내려갔습니다. 그리고 DFS를 이용해 해당 개수만큼 사다리를 만들어보면서 최소개수를 찾았습니다. package BOJ.Simulation..

알고리즘 2022.03.30

백준 20057번 마법사 상어와 토네이도 (JAVA)

https://www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 저는 해당 문제를 DFS를 이용해 해결하였습니다. 저는 방향을 왼쪽, 아래쪽, 오른쪽, 위쪽 순으로 인덱스를 매겼습니다. 그리고 이 방향이 모듈러 연산을 했을 때 나눠떨어지지 않으면 길이를 하나씩 늘려 주었습니다. 모래의 비율로 퍼저나가는 것은 하드코딩하였습니다. 매핑시켜 for문으로 만들고 싶었지만, 괜찮은 방법이 떠오르지 않아 하드코딩하였습니다. package ..

알고리즘 2022.03.29

백준 20056번 마법사 상어와 파이어볼 (JAVA)

https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 저는 Queue를 이용해 각각의 파이어볼의 정보를 입력받았습니다. 이를 List[][] map에 넣고 각각의 사이즈를 보면서 파이어볼이 겹치는 곳이 있는지 확인하였습니다. 파이어볼이 겹친다면 문제의 규칙에 따라 4개로 나눠주었습니다. package BOJ.Simulation; import java.io.BufferedReader; import java.io...

알고리즘 2022.03.28