[백준] 10026번 적록색약
-
출처 : 적록색약
-
알고리즘 : 재귀, DFS
-
풀이
- 각 좌표를 순회
- 아직 check가 안 됐으면서 인접 좌표와 값이 같으면 check
-
소감 : 풀이 자체는 쉬웠는데 코딩하는데 시간이 좀 걸렸다
코드
import sys
def make_counted_true(board, counted, pos):
counted[pos['i']][pos['j']] = True
for d in ['left','right','up','down']:
new_pos = get_new_position(pos, d)
if (new_pos['i'] >= 0 and new_pos['i'] < len(board)) and (new_pos['j'] >= 0 and new_pos['j'] < len(board)):
if not counted[new_pos['i']][new_pos['j']]:
if board[pos['i']][pos['j']] == board[new_pos['i']][new_pos['j']]:
make_counted_true(board, counted, new_pos)
def get_new_position(pos, direction):
if direction == 'up':
return {'i': pos['i']-1, 'j': pos['j']}
if direction == 'down':
return {'i': pos['i']+1, 'j': pos['j']}
if direction == 'left':
return {'i': pos['i'], 'j': pos['j']+1}
if direction == 'right':
return {'i': pos['i'], 'j': pos['j']-1}
def print_line(list_line):
for line in list_line:
print(line)
print('')
def get_part_count(board):
counted = [[False for j in range(len(board))] for i in range(len(board))]
count = 0
for i in range(len(board)):
for j in range(len(board)):
if not counted[i][j]:
count += 1
make_counted_true(board, counted, {'i': i, 'j': j})
return count
def get_input():
origin_board = []
changed_board = []
n = int(input(''))
for i in range(n):
temp = input('')
origin_board.append(list(temp))
changed_board.append(list(temp.replace('R', 'G')))
return n, origin_board, changed_board
sys.setrecursionlimit(99999)
# get_input()
n, origin_board, changed_board = get_input()
origin_count = get_part_count(origin_board)
changed_count = get_part_count(changed_board)
print(origin_count, changed_count)
Author And Source
이 문제에 관하여([백준] 10026번 적록색약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@leehj8896/백준-10026-적록색약
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import sys
def make_counted_true(board, counted, pos):
counted[pos['i']][pos['j']] = True
for d in ['left','right','up','down']:
new_pos = get_new_position(pos, d)
if (new_pos['i'] >= 0 and new_pos['i'] < len(board)) and (new_pos['j'] >= 0 and new_pos['j'] < len(board)):
if not counted[new_pos['i']][new_pos['j']]:
if board[pos['i']][pos['j']] == board[new_pos['i']][new_pos['j']]:
make_counted_true(board, counted, new_pos)
def get_new_position(pos, direction):
if direction == 'up':
return {'i': pos['i']-1, 'j': pos['j']}
if direction == 'down':
return {'i': pos['i']+1, 'j': pos['j']}
if direction == 'left':
return {'i': pos['i'], 'j': pos['j']+1}
if direction == 'right':
return {'i': pos['i'], 'j': pos['j']-1}
def print_line(list_line):
for line in list_line:
print(line)
print('')
def get_part_count(board):
counted = [[False for j in range(len(board))] for i in range(len(board))]
count = 0
for i in range(len(board)):
for j in range(len(board)):
if not counted[i][j]:
count += 1
make_counted_true(board, counted, {'i': i, 'j': j})
return count
def get_input():
origin_board = []
changed_board = []
n = int(input(''))
for i in range(n):
temp = input('')
origin_board.append(list(temp))
changed_board.append(list(temp.replace('R', 'G')))
return n, origin_board, changed_board
sys.setrecursionlimit(99999)
# get_input()
n, origin_board, changed_board = get_input()
origin_count = get_part_count(origin_board)
changed_count = get_part_count(changed_board)
print(origin_count, changed_count)
Author And Source
이 문제에 관하여([백준] 10026번 적록색약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leehj8896/백준-10026-적록색약저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)