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
- 백준
- Merge sort
- 프로그래머스
- 이진탐색
- 파이썬
- 자바
- 멱등
- 너비우선탐색
- 캐싱
- 코딩테스트
- 스택과 힙
- BOJ
- HTTP
- 비지도학습
- 파이썬 알고리즘
- 코테
- 해시
- rest api
- 파이썬 오류
- 코딩
- 지도학습
- 머신러닝
- bineary search
- 강화학습
- 오버라이딩
- 딕셔너리
- 알고리즘
- post
- 딥러닝
- 깊이우선탐색
Archives
- Today
- Total
chae._.chae
[Algorithm] 백준 #1012 - 유기농 배추 본문
728x90
반응형
https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
📌 다시 봐야 할 부분
1. 리스트 컴프리헨션!
c = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
M, N = map(int, input().split()) # 5, 7
area = [M * [0] for i in range(N)]
print(area)
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
감이 잘 안와서 예시로 숫자를 넣어보았다. 가로, 세로값으로 5와 7을 넣어주고,
리스트는 M*[0] for i in range(N) 로 만들면 5개씩 7묶음의 리스트가 생성된 결과를 확인하며 풀었다.
2. 내가 실수한 부분이다ㅠㅠ
문제에서 배추의 위치가 전부 주어져서 모두 0으로 초기화한 2차원 리스트를 하나 만들어두고, 값을 입력받을 때마다 해당 위치를 1로 바꾸어주었다.
이때 a, b의 변수로 입력받고 리스트를 area[a][b] = 1 을 해주었는데 순서가 틀렸다...!
이 부분을 생각안하고 막 풀면 항상 실수하는 것 같다.. 눈에 더 익을 때까지 열심히 봐두고, 신경써야겠다
import sys
from collections import deque
dx=[0, 0, -1, 1]
dy=[-1, 1, 0, 0]
def bfs(graph, x, y):
queue = deque()
queue.append((x, y))
graph[x][y] = 0 # 지나간거 표시해주기
while queue: # 큐가 빌때까지
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx<0 or nx >=N or ny<0 or ny >= M: # 범위 벗어난 경우
continue
if graph[nx][ny] == 1:
queue.append((nx, ny))
graph[nx][ny] = 0
T = int(sys.stdin.readline().rstrip()) # 테스트 케이스의 갯수
while T:
M, N, K = map(int, sys.stdin.readline().rstrip().split()) # 가로, 세로, 위치의 갯수
area=[[0] * M for i in range(N)]
result = 0
for _ in range(K): # 배추의 위치가 한개씩 모두 주어진다
a, b = map(int, sys.stdin.readline().rstrip().split())
# area[a][b] = 1
area[b][a] = 1
for i in range(N):
for j in range(M):
if area[i][j] == 1:
result += 1
bfs(area, i, j)
print(result)
T -= 1
아직도 좀 어렵긴 하지만 이전보다 훨씬 내가 스스로 적는 코드의 부분이 많아져 좀 재밌는 것 같다🥰
728x90
'파이썬 알고리즘 > BOJ' 카테고리의 다른 글
백준 구현 문제 틀린거 모음 : 구현(1) (0) | 2022.06.28 |
---|---|
[Algorithm] 백준 #14502 - 연구소 (0) | 2022.05.30 |
[Algorithm] 백준 #2667 - 단지번호붙이기 (0) | 2022.05.27 |
[Algorithm] 백준 #4963 - 섬의 개수 (0) | 2022.05.20 |
[Algorithm] 백준 #1946 - 신입사원 (0) | 2022.03.29 |