2025/05 3

[백준 1987] 알파벳

📍 문제https://www.acmicpc.net/problem/1987 📍 문제 풀이같은 알파벳은 두 번이상 지날 수 없다는 조건으로 `visited` 배열을 선언했다. A부터 Z까지를 인덱스로 생각해 배열의 크기를 26두고 방문 처리를 해줬다. dfs를 좌표와 현재까지 방문한 칸수로 재귀호출을 진행했다. 상하좌우의 좌표를 `dx` 와 `dy`를 통해 이동하도록 하고, 해당 좌표의 값이 보드의 범위 내에 존재한다면 방문 처리해줬다.그리고 호출이 종료된다면 다시 방문값을 false로 바꿔주면서 매번 최대값을 갱신해줬다. 기본적인 dfs방식과 백트래킹이 합쳐진 문제였다.보통의 백트래킹 문제는 종료 조건이 존재하지만, 이 문제의 경우에는 종료하는 위치도, 조건도 없었다.그렇기 때문에 매번 최대값을 갱신해..

[백준 15686] 치킨 배달

📍 문제https://www.acmicpc.net/problem/15686 📍 문제 풀이 풀이과정은 아래와 같다.1. 집과 치킨집의 좌표를 각각 리스트에 저장한다.2. 가능한 치킨집의 조합을 모두 구한다.3. 조합별 집과의 치킨 거리를 구한다. 이를 통해 도시 전체의 치킨 거리를 구한다.4. 도시 전체 치킨 거리가 더 작다면 값 갱신 이때 가능한 치킨집의 조합은 opened 배열로 확인했다. 값이 true라면 치킨집이 열려있고, false면 닫혀있다고 생각하고 풀이를 진행했다. 📍전체코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;im..

[백준 14889] 스타트와 링크 (S1)

📍 문제https://www.acmicpc.net/problem/14889 📍 문제 풀이우선 두팀으로 나눠야한다. 아래의 경우에는 visited배열을 두고 true값은 스타트팀, false값은 링크팀으로 구분했다. 팀을 나누는 방식이 이 문제의 관건인 것 같다.https://www.acmicpc.net/problem/15650이 문제를 풀어본다면 팀 나누는 방식에 대한 이해가 조금 더 수월할 것 같다.. 팀을 나눈 후에는 각각 팀에 대한 능력치 값을 구한다. for문을 통해 능력치의 합을 구해주면 된다. 그리고 스타트팀과 링크팀의 차이의 절대값을 구해준다. 이때 차이가 0이라면 그게 최소값이기 때문에 바로 프로그램을 종료시켜주면 불필요한 연산을 줄일 수 있다.하지만,,처음에는 생각하지 못해서 아래의 ..