※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 3010번 문제인 페그이다.
문제는 아래 링크를 확인하자.
3010번: 페그
총 일곱 줄에 걸쳐 보드의 상태가 주어진다. 처음 두 줄과 마지막 두 줄의 첫 번째, 두 번째 문자는 항상 공백이다. 나머지는 'o' 또는 '.'이다.
www.acmicpc.net
보드의 주어진 상태에서 말이 움직일 수 있는 경우의 수는 크게 두 가지 방법으로 셀 수 있다.
1) 보드 위의 각 'o'마다 네 방향으로 'o'와 '.'이 순서대로 있는지 각각 확인하여 센다.
2) 보드 위의 각 '.'마다 네 방향으로 'o'와 'o'가 순서대로 있는지 각각 확인하여 센다.
이를 확인하는 과정에서, 보드를 저장한 배열을 벗어나는 오류가 나지 않게 하기 위해 글쓴이는 보드의 상하좌우에 2칸의 공백을 집어넣었다.
보드의 몇 줄은 공백으로 시작하는 입력이 주어짐을 유의하여 코딩하는 것이 좋다. 예를 들면, getline을 이용하거나 입력을 받은 후 앞뒤에 적절히 무의미한 문자를 넣어줄 필요가 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string peg[11];
int main()
{
for (int i = 2;i < 9;i++) {
getline(cin, peg[i]);
peg[i] = " " + peg[i] + " ";
}
peg[0] = peg[1] = peg[9] = peg[10] = " ";
int ans = 0;
for (int i = 2;i < 9;i++) {
for (int j = 2;j < 9;j++) {
if (peg[i][j] == '.') {
if (peg[i - 1][j] == 'o' && peg[i - 2][j] == 'o') ans++;
if (peg[i + 1][j] == 'o' && peg[i + 2][j] == 'o') ans++;
if (peg[i][j - 1] == 'o' && peg[i][j - 2] == 'o') ans++;
if (peg[i][j + 1] == 'o' && peg[i][j + 2] == 'o') ans++;
}
}
}
cout << ans;
}728x90
'BOJ' 카테고리의 다른 글
| [BOJ 3049 // C++] 다각형의 대각선 (0) | 2021.04.17 |
|---|---|
| [BOJ 3005 // C++] 크로스워드 퍼즐 쳐다보기 (0) | 2021.04.16 |
| [BOJ 9345 // C++] 디지털 비디오 디스크(DVDs) (1) | 2021.04.14 |
| [BOJ 1517 // C++] 버블 소트 (0) | 2021.04.13 |
| [BOJ 5676 // C++] 음주 코딩 (0) | 2021.04.12 |