fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 34238 (C++) Find the Fox
최초 업로드: 2025-09-02 15:03:25
최근 수정 시간: 2025-09-02 15:03:43
게시자: rlatjwls3333
카테고리: 백준
조회수: 5
# [Silver V] Find the Fox [문제 링크](https://www.acmicpc.net/problem/34238) ## 문제 설명 <p>$N$행 $M$열의 글자판이 주어지고, 글자판의 각 칸에는 영어 알파벳 <span style="color:#e74c3c;"><code>F</code></span>, <span style="color:#e74c3c;"><code>O</code></span>, <span style="color:#e74c3c;"><code>X</code></span> 중 하나가 쓰여 있다.</p> <p>당신은 이 글자판에서 영단어 <span style="color:#e74c3c;"><code>FOX</code></span>를 모두 찾아야 한다. <span style="color:#e74c3c;"><code>FOX</code></span>는 다음과 같은 규칙으로 찾아야 한다.</p> <ol> <li>처음에 알파벳 <span style="color:#e74c3c;"><code>F</code></span>를 선택한다.</li> <li>1에서 선택한 <code><span style="color:#e74c3c;">F</span></code>와 상하좌우/대각선으로 인접한 알파벳 <code><span style="color:#e74c3c;">O</span></code>를 선택한다.</li> <li>2에서 선택한 <code><span style="color:#e74c3c;">O</span></code>와 상하좌우/대각선으로 인접한 알파벳 <span style="color:#e74c3c;"><code>X</code></span>를 선택한다.</li> <li>1, 2, 3 에서 선택한 <span style="color:#e74c3c;"><code>F</code></span>,<span style="color:#e74c3c;"> <code>O</code></span>,<span style="color:#e74c3c;"> <code>X</code></span>가 모두 같은 행, 또는 같은 열, 또는 같은 대각선에 있을 경우 <span style="color:#e74c3c;"><code>FOX</code></span>를 하나 찾은 것이다.</li> </ol> <p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/2acbf3ba-96f4-4513-b46b-96a7ce2f2fdc/-/preview/" style="height: 205px; width: 600px;"></p> <p>위 그림은 <span style="color:#e74c3c;"><code>FOX</code></span>를 바르게 찾은 예시이다.</p> <p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/1b223db6-eb5d-45e9-9688-68bcbfb3c937/-/preview/" style="height: 71px; width: 600px;"></p> <p>위 그림은 <span style="color:#e74c3c;"><code>FOX</code></span>를 바르게 찾은 예시가 아닌 것들이다.</p> <p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/cf47b2dc-5989-45df-bb8b-f3215095991b/-/preview/" style="height: 171px; width: 600px;"></p> <p>위 그림처럼 알파벳의 배치에 따라 한 알파벳이 여러 개의 <span style="color:#e74c3c;"><code>FOX</code></span>에 포함될 수도 있다. 겹쳐진 <span style="color:#e74c3c;"><code>FOX</code></span>들도 모두 구분해서 세어야 한다.</p> <p>글자판이 주어지면 <span style="color:#e74c3c;"><code>FOX</code></span>가 모두 몇 개 있는지 구하여라.</p> ## 입력 <p>첫째 줄에 글자판의 행과 열의 수 $N,M$이 공백으로 구분되어 주어진다. $(3 \leq N,M \leq 100)$</p> <p>둘째 줄부터 $N$개의 줄에 걸쳐 글자판의 각 칸에 쓰인 알파벳이 각 행마다 $M$개 주어진다. 주어지는 알파벳은 모두 영어 알파벳 대문자 <span style="color:#e74c3c;"><code>F</code></span>, <span style="color:#e74c3c;"><code>O</code></span>, <span style="color:#e74c3c;"><code>X</code></span> 중 하나이다.</p> ## 출력 <p>첫째 줄에 글자판에서 찾을 수 있는 <span style="color:#e74c3c;"><code>FOX</code></span>의 총 개수를 출력한다.</p> ## 풀이 모든 칸에 대하여 상하좌우 대각선에 FOX가 존재하는지 확인하면 된다. ``` c++ #include<bits/stdc++.h> using namespace std; string s[100]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; for(int i=0;i<n;i++) cin >> s[i]; int cnt=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(j+2<m && s[i][j]=='F' && s[i][j+1]=='O' && s[i][j+2]=='X') cnt++; if(j-2>=0 && s[i][j]=='F' && s[i][j-1]=='O' && s[i][j-2]=='X') cnt++; if(i+2<n && s[i][j]=='F' && s[i+1][j]=='O' && s[i+2][j]=='X') cnt++; if(i-2>=0 && s[i][j]=='F' && s[i-1][j]=='O' && s[i-2][j]=='X') cnt++; if(i+2<n && j+2<m && s[i][j]=='F' && s[i+1][j+1]=='O' && s[i+2][j+2]=='X') cnt++; if(i+2<n && j-2>=0 && s[i][j]=='F' && s[i+1][j-1]=='O' && s[i+2][j-2]=='X') cnt++; if(i-2>=0 && j+2<m && s[i][j]=='F' && s[i-1][j+1]=='O' && s[i-2][j+2]=='X') cnt++; if(i-2>=0 && j-2>=0 && s[i][j]=='F' && s[i-1][j-1]=='O' && s[i-2][j-2]=='X') cnt++; } } cout << cnt; } ```