티스토리 뷰
[Silver 2] 1780 : 종이의 개수 - Python(파이썬)
https://www.acmicpc.net/problem/1780
설명
첫째줄에 N의 개수를 입력받고, 다음번 줄에 행렬의 내용을 입력받는다.
check 라는 함수를 만들어 인자로
row : 행
col : 열
N : 행 또는 열의 수
를 받는다.
이후 행렬(paper)의 첫 원소를 val의 값으로 할당하고,
val값과 다른 값이 나온 경우 (즉, 각 종이가 다른 수로 되어있는 경우 -> 같은 수가 아닌 경우)
9개의 크기로 자르고 다시 해당 종이의 첫번째 지점에서 탐색을 시작한다.
def check(row, col, N):
global minus_cnt, zero_cnt, one_cnt
val = paper[row][col]
# 현재 종이의 색(val)과 다르면 9개로 분할하기
for i in range(row, row+N):
for j in range(col, col+N):
if paper[i][j] != val:
N = N // 3
check(row, col, N) # 9개로 쪼개었을때 (첫번째)
check(row, col + N , N) # 9개로 쪼개었을때 (두번째)
check(row, col + (2 * N), N) # 9개로 쪼개었을때 (세번째)
check(row + N , col, N) # 9개로 쪼개었을때 (네번째)
check(row + N , col + N, N) # 9개로 쪼개었을때 (다섯번째)
check(row + N , col + (2 * N), N) # 9개로 쪼개었을때 (여섯번째)
check(row + (2 * N), col, N) # 9개로 쪼개었을때 (일곱번째)
check(row + (2 * N), col + N, N) # 9개로 쪼개었을때 (여덟번째)
check(row + (2 * N), col + (2 * N), N) # 9개로 쪼개었을때 (아홉번째)
return
# 현재 종이 색상에 따라 갯수 카운트
if val == -1:
minus_cnt += 1
elif val == 0:
zero_cnt += 1
else:
one_cnt += 1
N = int(input())
paper = [list(map(int, input().split())) for _ in range(N)]
minus_cnt, zero_cnt, one_cnt = 0, 0, 0
check(0,0,N)
print(minus_cnt)
print(zero_cnt)
print(one_cnt)
'알고리즘' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 - 파이썬 (0) | 2022.01.25 |
---|---|
[백준] 6609 : 로또 - Python(파이썬) (0) | 2021.08.21 |
[백준] 13305 : 주유소 - Python(파이썬) (0) | 2021.08.10 |
[백준] 11726 : 2xn 타일링 - Python(파이썬) (0) | 2021.08.08 |
[백준] 1541 : 잃어버린 괄호 - Python(파이썬) (2) | 2021.08.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로젝트
- Spring
- 회고
- 우테코 회고
- 8주차 회고
- ZNS SSD
- 2차 데모데이
- 우테코
- 스프링 프레임워크
- 팀프로젝트
- 런칭 페스티벌
- 스프링 부트
- 알림개선기
- 파이썬
- CI/CD
- 네트워크
- ZNS
- dm-zoned
- 환경 별 로깅 전략 분리
- 알림기능개선기
- dm-zoned 코드분석
- jpa
- 백준
- 피움
- 5주차 회고
- java
- 스프링MVC
- 스프링 Logback
- 피움 6주차 회고
- 3차 데모데이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함