※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26071번 문제인 오락실에 간 총총이이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26071
26071번: 오락실에 간 총총이
모든 곰곰이를 하나의 칸에 모으기 위해, 총총이가 최소 몇 번 버튼을 눌러야 하는지 구하시오.
www.acmicpc.net
주어진 게임 화면에서 가장 왼쪽에 있는 곰곰이와 가장 오른쪽에 있는 곰곰이가 같은 열에 있게, 그리고 가장 위쪽에 있는 곰곰이와 가장 아래쪽에 있는 곰곰이가 같은 행에 있게끔 조작하는 것으로 문제를 해결할 수 있다.
모든 곰곰이가 같은 열에 있지 않다면, 모든 곰곰이들이 같은 열에 있게 하기 위해 모든 곰곰이를 맨 윗열 또는 맨 아랫열로 옮기는 것이 항상 최선의 전략이 된다는 점을 관찰하자. 물론 모든 곰곰이가 같은 열에 있다면 움직일 필요가 없다.
같은 논리로 모든 곰곰이가 같은 행에 있지 않은 경우 또한 처리해주자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int N;
string board[1500];
int rmx = -1000000007, rmn = 1000000007, cmx = -1000000007, cmn = 1000000007;
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int r = 0; r < N; r++) cin >> board[r];
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
if (board[r][c] == 'G') {
rmx = max(rmx, r), rmn = min(rmn, r);
cmx = max(cmx, c), cmn = min(cmn, c);
}
}
}
if (rmn < rmx) ans += min(rmx, N - rmn - 1);
if (cmn < cmx) ans += min(cmx, N - cmn - 1);
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 26076 // C++] 곰곰이의 식단 관리 2 (0) | 2022.12.02 |
---|---|
[BOJ 26073 // C++] 외로운 곰곰이는 친구가 있어요 (0) | 2022.12.02 |
[BOJ 25813 // C++] Changing Strings (0) | 2022.12.01 |
[BOJ 26082 // C++] WARBOY (0) | 2022.12.01 |
[BOJ 26068 // C++] 치킨댄스를 추는 곰곰이를 본 임스 2 (0) | 2022.12.01 |