250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 심볼릭 레퍼런스
- 부트스트랩 클래스 로더
- 백준
- 자바
- 파이썬 문자열 메서드
- 자료구조
- AWS SAA-C03 합격후기
- 클래스 로더 계층
- 플랫폼 클래스 로더
- 어플리케이션 클래스 로더
- 객체지향
- 파이썬
- 알고리즘
- stop the world
- 2026 AWS SAA-C03
- 파이썬 리스트 메서드
- 스프링
- getreference
- 스프링 컨테이너
- python list method
- Spring
- dfs
- 딕셔너리
- 코딩테스트
- java
- 컴포넌트 스캔
- BFS
- aws saa-c03
- python
- 다이렉트 레퍼런스
Archives
- Today
- Total
클라우드 낚시꾼
[백준] 16956번 늑대와 양 - Python3 (애드 혹 문제, 이 문제가 정말 BFS 문제 일까?) 본문
CodingTest/문제풀이
[백준] 16956번 늑대와 양 - Python3 (애드 혹 문제, 이 문제가 정말 BFS 문제 일까?)
KanuBang 2023. 12. 24. 00:19728x90


문제 해석

- 미로 찾기 문제와 비슷하다.
- 1 ≤ R, C ≤ 500 이므로 최대 250000 크기의 그래프가 생성될 수 있다.
- 시간 제한은 2초이므로 O(N^2) 이하가 적절해 보인다.
- 양(S)은 가만히 있고, 늑대(W)가 움짇인다.
- 늑대가 양을 잡아 먹는 그 순간의 지점에 울타리 D를 설치 해야 한다.
- 스페셜 저지 문제이므로 쉽게 생각하면, 모든 빈 공간에 울타리 D를 설치하면 된다.
- 늑대와 양이 붙어 있는 그래프는 어떤 수를 써도 늑대를 막을 수 없다.
자연어 알고리즘과 코드
- 그래프 정보를 입력 받는다.
- 그래프 요소에 차례 차례 접근한다.
- if 요소 빈 공간 -> 빈 공간에 울타리를 친다.
- if 요소가 늑대 -> 상,하,좌,우로 양 있는지 확인한다.
- 만약, if 양이 있다. -> 0을 출력하고 즉시 종료한다.
- 만약, if 양이 없다. -> 다음 요소로 넘어간다.
- if 요소가 양 or 울타리 -> 다음 요소로 넘어간다.
- 그래프를 출력한다.
import sys
input = sys.stdin.readline
r,c = map(int, input().split())
graph = []
for i in range(r):
graph.append(list(input().rstrip()))
dx = [-1,1,0,0]
dy = [0,0,-1,1]
sheep,wolf,empty,defence = ('S','W','.','D') # 가독성
for i in range(r):
for j in range(c):
if graph[i][j] == wolf:
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or ny < 0 or nx >= r or ny >= c:
continue
if graph[nx][ny] == sheep:
print(0)
exit()
continue
if graph[i][j] == sheep or graph[i][j] == defence:
continue
graph[i][j] = defence
print(1)
[print(''.join(i)) for i in graph]
애드 혹 문제란? (백준 스페셜 저지)
특정 상황에서만 정답이 되고 일반화될 수 없는 해답을 말한다.
출처: https://jake-seo-dev.tistory.com/473 [제이크서 위키 블로그:티스토리]
세 줄 소감
1. 백준 스페셜 저지는 "답이 여러 가지가 될 수 있어 그 모두를 답으로 채점하는 프로그램이 들어가 있다는 뜻" 이다.
2. 한 방식으로 도전하다가 아닌 거 같으면 다른 방향으로 틀어야 한다.
3. 이 문제가 백준 BFS 문제집에 있었지만, 정말 BFS 문제인지 모르겠다.
BFS 알고리즘은 Queue 자료구조를 사용한다고 배웠다. 만약, BFS 문제라면 Queue를 사용하지 않아도 이렇게 이중 for문으로 상,하,좌,우 확인하는 것도 BFS 탐색으로 취급해야 한다. (필자는 이 문제는 BFS 탐색이 아니라고 생각한다.)
728x90
'CodingTest > 문제풀이' 카테고리의 다른 글
| [백준] 4963번 섬의 개수 - BFS 풀이 (Python3) (2) | 2023.12.27 |
|---|---|
| [백준] 1012번 유기농 배추 - BFS 풀이(Python3) (0) | 2023.12.24 |
| [백준] 2667번 단지번호붙이기 DFS - Python3 (1) | 2023.12.21 |
| [백준] 2178번 미로 탐색 Python3 - BFS (0) | 2023.12.21 |
| [백준] 1325번 효율적인 해킹 BFS/DFS Python - pypy3 (1) | 2023.12.20 |