본문 바로가기

문제풀이122

[JAVA] BOJ 백준 2933번 - 미네랄 목차 문제 내가 푼 방법 자바 코드 결과 및 회고 1. 문제 https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 2. 내가 푼 방법 구현이 필요한 BFS 문제이다. 클러스터를 찾을 때 BFS 알고리즘이 필요로 하고, 나머지는 실수 없이 구현해가면 된다. 나는 크게 막대기를 던져 미네랄을 파괴하는 함수, 인접한 클러스터를 찾는 함수, 클러스터가 중력을 받는 함수로 기능을 분리했다. 우선 문제에서는 바닥이 1로 시작되기 때문에, 던지는 높이를 받을 때 위쪽이 1로 .. 2024. 1. 10.
[JAVA] BOJ 백준 1194번 - 달이 차오른다, 가자. 목차 문제 내가 푼 방법 자바 코드 결과 및 회고 1. 문제 https://www.acmicpc.net/problem/1194 1194번: 달이 차오른다, 가자. 첫째 줄에 미로의 세로 크기 N과 가로 크기 M이 주어진다. (1 ≤ N, M ≤ 50) 둘째 줄부터 N개의 줄에 미로의 모양이 주어진다. 같은 타입의 열쇠가 여러 개 있을 수 있고, 문도 마찬가지이다. 그리고, www.acmicpc.net 2. 내가 푼 방법 비트 연산자를 이용해 풀면 훨씬 코드가 간단해지는 문제이다. | 연산 : OR 연산자로, 피연산자 중 한쪽 값이 1일 경우에 1을 반환하고, 그 외에는 0을 반환한다. & 연산 : AND 연산자로, 피연산자 양 쪽 값이 모두 1일 경우에 1을 반환하고, 그 외에는 0을 반환한다. ^ 연산.. 2024. 1. 9.
[JAVA] BOJ 백준 1039번 - 교환 목차 문제 내가 푼 방법 자바 코드 결과 및 회고 1. 문제 https://www.acmicpc.net/problem/1039 2. 내가 푼 방법 DFS와 가지치기를 이용해 시간초과를 고려해야 하는 문제이다. 처음에 String으로 변환해 풀이를 할까 고민했는데, 값을 변경하고 다시 숫자로 변환하는 과정에서 속도가 비교적 느릴 것으로 판단했다. 따라서 나누기와 나머지 연산을 통해 변환할 위치의 숫자 두 개를 추출했고, 변환하려는 숫자가 첫 번째 자리(i = 0)임과 동시에 뒤에 나오는 숫자(rj)가 0일 경우는 불가능한 상황으로 continue; 문으로 처리했다. 그 후, visit 배열을 이용한 가지치기를 한다. visit[숫자][K번 변환]을 통해 이전에 k번의 변환에서 변환한 숫자를 방문한 적 없을.. 2024. 1. 9.
[JAVA] BOJ 백준 6087번 - 레이저 통신 목차 문제 내가 푼 방법 자바 코드 결과 및 회고 1. 문제 https://www.acmicpc.net/problem/6087 2. 내가 푼 방법 이 문제의 핵심은 위치와 방향 상태를 이전에 방문한 적 있는지 확인하기 위해 Integer형인 visit 배열을 사용한다는 것이다. 처음 이 문제를 풀었을 때는 boolean 자료형으로 이전 방문을 체크했는데, boolean을 사용할 경우에는 올바른 답이 나오지 않는다. 그 이유는 우리가 카운팅 해야 할 값은 필요한 거울의 수이며, 해당 위치와 방향까지 도달하기까지 거울을 사용할 수도 있고 없는, 즉 일정하지 않는 필요한 거울의 수가 큐에 쌓인다. 따라서 먼저 나오는 위치와 방향이 항상 제일 작은 거울의 수를 보장하지 않기 때문에, Integer 자료형으로 확.. 2024. 1. 9.
[JAVA] BOJ 백준 1726번 - 로봇 목차 문제 내가 푼 방법 자바 코드 결과 및 회고 1. 문제 https://www.acmicpc.net/problem/1726 1726번: 로봇 많은 공장에서 로봇이 이용되고 있다. 우리 월드 공장의 로봇은 바라보는 방향으로 궤도를 따라 움직이며, 움직이는 방향은 동, 서, 남, 북 가운데 하나이다. 로봇의 이동을 제어하는 명령어는 www.acmicpc.net 2. 내가 푼 방법 평소 BFS 문제는 상하좌우로 움직였지만, 이 문제는 로봇의 시작 위치와 방향에서 한 칸, 두 칸, 세 칸 이동하는 경우(Go)와 방향을 변경하는 경우(Turn)로 움직여야 했다. 먼저 위치와 방향이 동일한 적이 있는지 확인하기 위해 visit 배열에 몇 번 이동했는지를 저장해 주었다. 따라서 특정 위치와 방향에 도달했을 때 이.. 2024. 1. 9.
[JAVA] BOJ 백준 1103번 - 게임 목차 문제 내가 푼 방법 자바 코드 결과 및 회고 1. 문제 https://www.acmicpc.net/problem/1103 1103번: 게임 줄에 보드의 세로 크기 N과 가로 크기 M이 주어진다. 이 값은 모두 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 보드의 상태가 주어진다. 쓰여 있는 숫자는 1부터 9까지의 자연수 또는 www.acmicpc.net 2. 내가 푼 방법 문제를 보자마자 DFS를 떠올렸는데, 실은 DFS에 DP를 사용해 가지치기를 함으로써 시간을 단축시켜야 하는 문제이다. 먼저 입력을 받을 때 'H'인 구멍을 0으로 설정해 주었다. for (int i = 0; i < N; i++) { String line = br.readLine(); for (int j = 0; j .. 2024. 1. 7.