2025/01 4

[Boj] 백준 C++ #16948 데스 나이트

📍 문제 링크 : https://www.acmicpc.net/problem/16948 📍 알고리즘 분류 : BFS 📍 문제 풀이이 문제는 큐를 이용해서 BFS로 해결할 수 있다. (r,c)의 위치에서 이동할 수 있는 칸은 아래 그림과 같이 총 6개이다. 따라서 한 위치에 대해 이동할 수 있는 6개의 위치를 모두 탐색해주면 된다.체스판을 넘어가거나, 이미 방문한 위치가 아니면 큐에 넣어준다.이미 방문했다면, 지금 방문한 것은 최단 횟수의 방문이 아니라는 것이므로 고려해줄 필요가 없다. 모든 지점은 처음으로 방문했을 때가 최단 횟수의 방문이다. 위 과정을 큐가 빌 때까지, 혹은 목표 지점에 도달할 때까지 반복한다. 이 문제의 핵심 로직은 모든 지점은 처음으로 방문했을 때가 최단 횟수의 방문이라는 것이다..

Boj 2025.01.07

[Boj] 백준 C++ #2138 전구와 스위치

📍 문제 링크 : https://www.acmicpc.net/problem/2138 📍 알고리즘 분류 : 그리디 알고리즘 📍 문제 풀이 신기한 점이 어떤 전구를 먼저 켜고 끄든, 순서가 중요하지 않다는 것이다!따라서 우리는 첫 번째 전구부터 순서대로 탐색하면 된다. 그리디하게. 현재에 최적이 되도록.첫 번째 전구를 목표 상태와 비교하고 다르다면 전구의 상태를 바꾸고, 같다면 그냥 두면 된다. 그런데 전구는 자신의 왼쪽, 자신, 자신의 오른쪽 이렇게 3개의 전구의 상태에 영향을 미치게 되는데그리디하게 접근할 경우 이 조건이 훨씬 쉽게 만들어진다. 현재 보고 있는 i번째 전구를 변경하고자 할 경우 할 수 있는 것은 i+1번째 전구를 누르는 것이라는 것이다! i-1번째 전구나 i번째 전구를 누르면 안되는..

Boj 2025.01.05

[Boj] C++ #1339 단어 수학

📍 문제 링크https://www.acmicpc.net/problem/1339 📍 알고리즘 분류그리디 📍 문제 풀이직관적으로 높은 자리에 큰 수가 와야된다는 것을 파악할 수 있다. 그런데 단어가 하나가 아니기 때문에, 어떤 단어에서는 높은 자리수의 알파벳이 다른 단어에서는 가장 낮은 자리수에 위치해있을 수도 있다. 따라서 모든 단어를 종합하여 판단해야 한다. ABC와 CADB가 주어졌다고 해보자.단어 수의 합은 (100*A + 10*B + C) + (1000*C + 100*A + 10*D + B) = (1000*C + 200A + 11B + C)가 될 것이다.이게 최대가 되기 위해서는 가장 큰 수를 곱하는 알파벳부터 9, 8, 7, 6, .. 순서대로 바꿔주면 된다.따라서 C = 9, A = 8, ..

Boj 2025.01.04