일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문제풀이
- MYSQL
- 백준 알고리즘
- 데이터베이스
- softeer
- C++
- 코틀린
- 자바
- BFS
- 백준
- 소프티어
- 1과목
- kotlin
- 코딩교육봉사
- 스프링
- SW봉사
- CJ UNIT
- 정보처리산업기사
- SQL
- 코딩봉사
- 파이썬
- java
- 회고
- python
- 프로그래머스
- 알고리즘
- programmers
- 백준알고리즘
- 공부일지
- 시나공
- Today
- Total
JIE0025
[Softeer][level3][21년 재직자 대회 예선] 이미지 프로세싱 - 파이썬(Python) 본문
https://softeer.ai/practice/info.do?idx=1&eid=627&sw_prbl_sbms_sn=141288
문제
자율주행 자동차를 구현하는 데에 있어서 이미지 프로세싱은 아주 중요한 요소이다. 카메라를 통해 들어온 차량 전후의 모습을 파악해 차량 근처에 있는 장애물들을 빠른 속도로 파악하고, 이를 다른 센서로부터 들어온 데이터와 함께 분석해 차량에게 올바른 명령을 내려야 하기 때문이다. 이 문제에서는 간단한 이미지 프로세싱을 하고자 한다.
H×W 크기의 2차원 비트맵 이미지가 있다. 이 이미지는 H×W개의 픽셀들로 구성되어 있으며, 위에서부터 i (1 ≤ i ≤ H)번째에 있고 왼쪽에서부터 j (1 ≤ j ≤ W)번째에 있는 픽셀은 (i, j)로 표기할 수 있다. 각 픽셀에는 색상이 붙어 있으며, 이 색상은 1 이상 109 이하의 정수로 표기할 수 있다. 픽셀 (i, j)의 색을 Ci, j라고 하자. 이 이미지에 아래와 같은 연산을 Q번 수행할 것이다:
(i, j, c): 픽셀 (i, j)를 고른다. 이 픽셀과 색깔이 같으면서 가로세로로 연결되어 있는 모든 픽셀들을 선택한 뒤, 그 픽셀들의 색을 모두 c로 바꾼다.
예를 들어 아래와 같은 이미지가 있다고 하자.
이 상황에서 (3,5,3) 연산을 수행해 보자. (3,5) 픽셀은 아래와 같다.
이 픽셀의 색은 4이므로, 색이 4이면서 (3,5)와 가로세로로 연결되어 있는 픽셀들을 선택하면 아래와 같다.
이 픽셀들의 색을 모두 3으로 바꾸면 된다.
다음 연산을 수행한다면 위와 같이 이미지가 변경된 상태에서 반복적으로 수행할 것이다. 모든 연산을 수행한 뒤의 이미지를 출력하는 프로그램을 작성하라.
💻 내가 쓴 정답코드
from collections import deque
import sys
input = sys.stdin.readline
d = [[1,0],[0,1],[-1,0],[0,-1]]
def checkNowPixels():
for i in range(h):
for j in range(w):
print(pixels[i][j], end=" ")
print()
def bfs(y,x, color, change):
queue = deque()
queue.append([y,x])
pixels[y][x] = change
visited = [[False]*w for _ in range(h)]
while queue:
r,c = queue.popleft()
for i in range(4):
dr = r+d[i][0]
dc = c+d[i][1]
if (0<=dr<h) and (0<=dc<w) and not visited[dr][dc] and pixels[dr][dc] == color:
visited[dr][dc] = True
pixels[dr][dc] = change
queue.append([dr,dc])
h,w = map(int,input().split())
pixels = [list(map(int,input().split())) for _ in range(h)]
q = int(input()) #연산 수
for i in range(q):
i, j, c = map(int,input().split())
i, j = i-1, j-1 #인덱스를 위한 처리
bfs(i,j, pixels[i][j], c)
checkNowPixels()
'알고리즘 > Softeer' 카테고리의 다른 글
[▲][Softeer][level3][21년 재직자 대회 예선] 좌석 관리 - 파이썬(Python) (0) | 2023.02.08 |
---|---|
[Softeer][level3] 택배 마스터 광우 - 파이썬(Python) (0) | 2023.02.06 |
[Softeer][level3] 우물 안 개구리 - 파이썬(Python) (0) | 2023.02.03 |
[Softeer][level3] 동계 테스트 시점 예측 - 파이썬(Python) (0) | 2023.02.03 |
[Softeer][level2] GBC - 파이썬(Python) (0) | 2023.02.03 |