본문 바로가기

Algorithm64

[백준] 17087-숨바꼭질 6-Java ❓문제 [백준] 17087-숨바꼭질 6-Java 🖊️풀이법 실버 2 문제이긴 하나, 간단하게 풀 수 있다. 입력 값들의 정보와 정답이 되어야 하는 값을 살펴보면 쉽게 어떻게 풀어야 할 지 유추할 수 있다. int N = 숨어있는 동생의 명수 int S = 수빈이의 위치 int[] aArr = 동생들이 숨어 있는 위치 여기서, 수빈이가 동생을 찾기 위해서 S + D(이동거리), S-D(이동거리) 로 이동할 수 있다. D의 값은 (수빈이의 위치 - 동생들의 위치)의 최소 공약수 가 될 것이다. 그렇다면, (동생들의 위치 - S(수빈이의 위치))의 절대 값을 구한 뒤에, 값들을 순회하며, 최소공약수를 구해주면 될 것이다.! 정답 코드 import java.io.*; import java.util.*; pub.. 2023. 11. 21.
[백준] 1406-에디터-Java ❓문제 [백준] 1406-에디터-Java 🖊️풀이법 오늘의 문제는 자료구조와 관련되어져 있는 문제 이다. 문제만 놓고 봤을때는 매우 간단한 문제이지만, 설정되어있는 시간 제한과 주어진 테스트 케이스의 최대 값을 보면 해결방법에 관한 컨셉을 잡는데 꽤나 애를 먹었다. 처음 도전할 때는 데이터 중간 삽입 및 수정에 유리한 LinkedList를 사용하여서 별도의 cursor인덱스를 두어 커서 인덱스를 변경하여서 데이터를 수정하는 방식으로 사용하였다. 하지만 이와 같은 방법을 사용하면 시간초과가 난다. 이유는 LinkedList의 add, remove 메서드의 원리 때문이다. LinkedList의 add, remove는 데이터 입출력에 prev와 next의 값을 변경하여 기존의 데이터를 다시 복사해서 입력하.. 2023. 11. 13.
[백준] 11048-이동하기-Java ❓문제 [백준] 11048-이동하기-Java 🖊️풀이법 이번 문제는 대표적인 다이나믹 프로그래밍 문제였다 :) (사실 문제 분류도 다이나믹 프로그래밍..) 문제는 실버2임에도 불구하고 꽤나 간단하다. 먼저 입력값을 받아 N, M, arr(미로가 되는 2차원 배열)에 데이터를 할당해 준다. 여기서 준규가 갈수 있는 방향은 (x+1,y) (x,y+1)(x+1,y+1) 세 방향으로만 갈수 있다. 특정 좌표 (x,y)의 최대값이 될수 있는 경우는 (x-1,y) (x,y-1)(x-1,y-1) 의 세개의 배열 값 중에서 가장큰 값과 현재 위치 (x,y)를 더해주면 된다. 위의 조건을 모든 배열을 순회하며 할당해 주면 된다. 정답 코드 import java.io.*; import java.util.*; public .. 2023. 11. 11.
[백준] 17425-약수의 합-Java ❓문제 [백준] 17425-약수의 합-Java 🖊️풀이법 DP를 이용하여 풀 수 있는 문제이다. 시간 제한이 1초이므로 일반적인 약수를 구하는 2중 for문을 사용할 시에는 100만 * 100만 으로 시간초과가 나게 된다. 따라서, 이번에는 시간 제한의 요건에 부합하기 위해서, 최적화를 진행해주어야 한다. 컨셉은 다음과 같다. 1. N의 최대값의 범위안에 있는 모든 소수들의 합을 구한다. 2. 구해진 소수의 합을 바탕으로 DP배열에 저장한다. 3. 저장된 DP의 값을 출력한다. 핵심 로직인 1번의 설명은 코드의 주석으로 설명 하도록 하겠다 :) 정답 코드 import java.io.*; import java.util.*; public class Main { public static void main(.. 2023. 10. 25.
[백준] 12789-도키도키 간식드리미-Java ❓문제 [백준] 12789-도키도키 간식드리미-Java 🖊️풀이법 큐와 스택을 이용하면 간단하게 풀 수 있다. Queue의 선입 선출과 Stack의 후입 선출의 개념으로 풀어보자. 반복문 탈출조건 Queue와 Stack이 모두 비어있을 경우 Queue가 비어있고, Stack의 peek가 currentNum 이 아닌경우 로직 (순서 중요!) Queue의 peek가 currentNum인 경우 Queue.poll 후 currentNum +1 Stack의 peek가 currentNum인 경우 Stack.poll 후 currentNum +1 Queue의 peek가 currentNum이 아닌 경우, Queue.poll 이후 Queue에서 poll한 값을 Stack.push 각각의 로직을 수행한 후에는 continu.. 2023. 8. 30.
[백준] 14940-쉬운 최단거리-Java ❓문제 [백준] 14940-쉬운 최단거리-Java 🖊️풀이법 간단한 bfs 문제이다. 이전까지 풀었던 bfs문제에서는 요소들이 고정되어있는 상태에서 탐색해야 하기때문에 이미 탐색한 노드인지 아닌지를 확인해줘야 했다. (예를 들면, boolean visited[][]와 같은 배열을 이용해서, 노드를 탐색했는지 안했는지 확인, 물론 해당 배열을 이용하지 않아도 풀 수 있다.) 하지만, 이번 그래프 탐색은 노드들의 값을 변화시켜서 탐색하여, 초기값과 다르면 이미 탐색한 배열로 확인할 수 있기 때문에 간단하게 처음 입력받는 노드들만 잘 셋팅 해주면 된다. :) bfs 방식은 흔히 사용하는 Queue를 이용하기 때문에 풀면서 생각한 포인트만 작성하겠다. 노드를 탐색했는지 확인하는 별도의 배열은 생성 X 탐색할 .. 2023. 8. 12.