[BOJ, Python] 10026 - 적록색약 ( with DFS )

2022. 9. 8. 20:58·PS (Problem Solving)
728x90
 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

좀 더 클린한 코드로 리팩토링이 필요해보이나, List와 DFS 개념을 활용하여 해결하였다.

 

방문 배열을 만들어주고, 정상인의 경우와 적녹색약인 경우 각각의 함수를 정의하지 않고, 정상인일 경우를 해결한 후에 적색을 녹색으로 변경하여 다시 한번 깊이 우선 탐색을 돌려주었다.

import sys
sys.setrecursionlimit(10 ** 9)

n = int(input())
arr = list()
for _ in range(n):
    arr.append(list(input()))
    
# 정상인의 경우, 색을 따로 구분
visit = [[False for _ in range(n)] for _ in range(n)]
normal = 0

def dfs(x, y, c):
    global arr
    visit[x][y] = True
    
    if x - 1 >= 0:
        if arr[x - 1][y] == c and not visit[x - 1][y]:
            dfs(x-1, y, c)
    if x + 1 < n:
        if arr[x + 1][y] == c and not visit[x + 1][y]:
            dfs(x+1, y, c)
    if y - 1 >= 0:
        if arr[x][y - 1] == c and not visit[x][y - 1]:
            dfs(x, y-1, c)
    if y + 1 < n:
        if arr[x][y + 1] == c and not visit[x][y + 1]:
            dfs(x, y+1, c)

for i in range(n):
    for j in range(n):
        if not visit[i][j]:
            normal += 1
            dfs(i, j, arr[i][j])

# 적녹색약인 경우, 녹색이나 적색을 서로의 색을 바꾸어준다
for i in range(n):
    for j in range(n):
        if arr[i][j] == 'R':
            arr[i][j] = 'G'

visit = [[False for _ in range(n)] for _ in range(n)]
obs = 0

for i in range(n):
    for j in range(n):
        if not visit[i][j]:
            obs += 1
            dfs(i, j, arr[i][j])

print(normal, obs)
728x90
저작자표시 (새창열림)

'PS (Problem Solving)' 카테고리의 다른 글

[BOJ, Swift] 17298 - 오큰수 ( with 스택 )  (0) 2022.09.16
[BOJ, Swift] 1786 - 찾기 ( with KMP 알고리즘 )  (0) 2022.09.13
[BOJ, Swift] 1021 - 회전하는 큐 ( with 덱(Dequeue) )  (0) 2022.08.13
[BOJ, Python] 람다(lambda)를 활용한 리스트 정렬  (0) 2022.07.24
[BOJ, Swift] 18258 - 큐 2  (0) 2022.07.22
'PS (Problem Solving)' 카테고리의 다른 글
  • [BOJ, Swift] 17298 - 오큰수 ( with 스택 )
  • [BOJ, Swift] 1786 - 찾기 ( with KMP 알고리즘 )
  • [BOJ, Swift] 1021 - 회전하는 큐 ( with 덱(Dequeue) )
  • [BOJ, Python] 람다(lambda)를 활용한 리스트 정렬
100두산
100두산
출발하게 만드는 힘이 동기라면, 계속 나아가게 만드는 힘은 습관이다.
  • 100두산
    정상에서 보자 ✈️
    100두산
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • Life (6)
        • living (1)
      • Research (6)
      • AI (20)
      • Dev (45)
        • iOS (28)
        • Web (4)
        • flutter (9)
        • etc (4)
      • PS (Problem Solving) (23)
      • Computer Science and Engine.. (21)
        • Data Structures and Algorit.. (13)
        • OOP (Object Oriented Progra.. (8)
      • etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    PS
    xcode
    SKTelecom
    D3
    ios
    c++
    Python
    swift
    BOJ
    티스토리챌린지
    SKT
    오블완
    알고리즘
    자료구조
    TIP
    백트래킹
    AI
    파이썬
    백준
    Challenger
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
100두산
[BOJ, Python] 10026 - 적록색약 ( with DFS )
상단으로

티스토리툴바