[백준/BOJ] 9663 N-Queen - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 9663 N-Queen - JAVA문제https://www.acmicpc.net/problem/9663 문제 분석조건`N×N` 체스판 위에 N개의 퀸을 서로 공격하지 못하도록 배치하는 경우의 수를 출력풀이방법체스에서 퀸은 가로, 세로, 대각선 방향으로 공격을 할 수 있다. 따라서 서로 공격하지 않으려면 한 행에 하나의 퀸만 존재하고, 같은 열과 대각선 방향에 다른 퀸이 존재하지 않아야 된다.첫 번째 행부터 퀸의 위치가 1개 정해지면 다음 행에서는 다른 퀸이 존재할 수 있는 자리가 정해진다. 한 행마다 퀸을 한 개씩 놓는 방식으로 검사한다.`setQueen`함수에서 해당 행에서 `col`열에 퀸을 배치하고 같은 열이나 대각선 방향에 다른 퀸이 없는지 확인한다. 유효성을 확인한 뒤 다음 행의..
[프로그래머스] 43105 정수 삼각형 - JAVA
·
알고리즘/문제풀이
[프로그래머스] 43105 정수 삼각형 - JAVA문제https://school.programmers.co.kr/learn/courses/30/lessons/43105 문제 분석조건아래처럼 정수로 이루어진 삼각형이 주어진다.맨 위에서 시작해서 아래로 내려가며 인접한 수를 선택해 내려올 때, 최댓값이 되는 경로의 합을 구하는 문제 [7] [3, 8] [8, 1, 0] [2, 7, 4, 4][4, 5, 2, 6, 5]풀이방법아래에서부터 위로 올라가며 각 칸에서 선택 가능한 두 자식 중 큰 값을 더해 `triangle`값을 업데이트 해주는 방식으로 구하였다.코드class Solution { public int solution(int[][] triangle) { int floor =..
[백준/BOJ] 11404 플로이드 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 11404 플로이드 - JAVA문제https://www.acmicpc.net/problem/11404문제 분석조건도시의 개수 n, 그리고 도시 간 버스 노선 정보가 주어진다.모든 도시 쌍 (i, j)에 대해 최소 이동 비용을 구하는 문제도시 개수: 1 ≤ n ≤ 100버스 노선 수: 1 ≤ m ≤ 100,000비용: 1 ≤ cost ≤ 100,000같은 도시 쌍에 대해 여러 개의 노선이 존재할 수 있음풀이방법모든 정점 간 최단 거리를 구할 때 사용하는 대표적인 알고리즘인 플로이드 워셜을 이용한다.`dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j])`k는 중간에 경유하는 도시`i → j`로 바로 가는 비용과 `i → k → j`로 가는 비용을 비교하여 최소값으..
[백준/BOJ] 16236 아기 상어 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 16236 아기 상어 - JAVA문제https://www.acmicpc.net/problem/16236 문제 분석조건NxN 공간에 물고기와 아기 상어가 있다.상어는 자신보다 크기가 작은 물고기만 먹을 수 있고,크기가 같은 물고기는 지나갈 수만 있고,더 큰 물고기는 아예 지나가지 못한다.한 번에 가장 가까운 물고기를 먹으러 간다.만약 거리가 같은 물고기가 여러 마리라면,➝ 위쪽, 그다음 왼쪽 물고기를 우선으로 선택한다.상어는 자신의 크기만큼 물고기를 먹을 때마다 크기가 1 증가한다.모든 과정을 반복하며, 상어가 더 이상 먹을 물고기가 없을 때까지 걸리는 총 시간을 구하는 문제풀이방법가장 가까운 물고기를 구하기 위해 BFS를 사용한다. 그 과정에서 우선순위 큐를 활용하여 거리 -> 위쪽 ->..
[백준/BOJ] 7576 토마토 - JAVA
·
알고리즘/문제풀이
[백준/BOJ] 7576 토마토 - JAVA문제 🍅https://www.acmicpc.net/problem/7576문제 분석조건`M*N` 크기의 상자에 각 칸에 토마토가 아래와 같이 저장되어있다.익은 토마토는 1, 안익은 토마토는 0, 토마토가 없음 -1익은 토마토는 하루가 지나면 인접한 4방향의 토마토를 익게 만드는데, 상자 속 모든 토마토가 익기까지 며칠이 걸리는지 구하는 문제모두 익지 못하는 상황에는 -1 출력풀이방법익은 토마토를 전부 큐에 넣고 BFS탐색을 시작한다.`visited`배열 대신 초기 입력받은 `box`를 이용하여 방문 처리를 한다.초기 입력받을 때 익지 않은 토마토 수를 카운트하고 방문처리와 동시에 익지 않은 토마토 수를 감소시키면 출력 전에 아직 안익은 토마토의 수를 알 수 있다..
[프로그래머스] 43163 단어 변환 - JAVA
·
알고리즘/문제풀이
[프로그래머스] 43163 단어 변환 - JAVA문제https://school.programmers.co.kr/learn/courses/30/lessons/43163 문제 분석조건두 개의 단어 `begin`과 `target`이 주어지고, 단어를 한 글자씩 바꿔가며 target으로 변환해야 한다.단, 변환 과정에서 사용할 수 있는 단어는 `words` 배열 안에 존재해야만 한다.최소 몇 번의 변환으로 `begin` ->`target`으로 바꿀 수 있는지 출력.`target`이 `words`에 없으면 변환 불가 → 0 리턴풀이방법한번에 한 글자만 바뀌며, 바뀔 수 있는 단어가 정해져있고, 최소 횟수를 구하는 문제이므로 BFS를 통해 답을 구할 수 있다.즉 단어들을 그래프의 노드로 보고, 한 글자만 다른 단어..