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 |
Tags
- Servlet
- 파이썬
- JPQL
- 서버 배포
- MVC
- 넘파이
- 저장소 복제
- 스프링부트 OpenAI API
- git 충돌 해결
- JPA
- 우분투
- springboot
- 자바
- jar빌드
- MySQL
- JDBC
- swap 메모리
- github 복제
- 비밀번호 재설정 API
- 두수의 합 자바
- Chat GPT
- HttpServletResponse
- Git
- 페이징 정렬
- Json 객체
- 값 타입
- 프로그래머스
- 저장소 이전
- api 개발
- 스프링 이메일 전송
Archives
- Today
- Total
현의 개발 블로그
백준 체크판 다시 칠하기 파이썬 본문
문제
https://www.acmicpc.net/problem/1018
문제 요약
8 X 8 체스판으로 잘라낸 후, 정사각형을 다시 칠한다.
잘라낸 체스판마다 다시 칠하는 정사각형 개수들 중 최솟값을 구한다.
입력
체스판 n, m ( 8 < n, m ≤ 50 )
체스 색깔 n줄
출력
다시 칠하는 정사각형 최소 개수
문제 아이디어
체스판 넘어가지 않을 때까지 반복
행: 1~ 8 번째 칸 ... n-7 ~ n
열: 1~ 8 번째 칸 ... n-7 ~ n
i) 첫 칸 검정
ii) 첫 칸 흰색
두 경우 모두 다 해보고 작은 개수 cnt 구하기
cnt 값들 중 최솟값 구하기
코드
import sys
n, m = map(int, sys.stdin.readline().split())
chess = [] # 체스판 색깔
cnt = [] # 8x8 영역별 다시 칠하는 개수 최소값
for _ in range(n):
chess.append(list(sys.stdin.readline().rstrip()))
for row in range(n-7): # n- 7 + 8 -> n-1 체스판 벗어나지 않도록
for col in range(m-7):
cnt1, cnt2 = 0, 0 # 각각 시작 검, 흰일때 다시 칠하는 개수
for i in range(row, row+8):
for j in range(col, col+8):
if (i+j) % 2 == 0:
if chess[i][j] == 'B': # 시작 검은색
cnt1+=1
if chess[i][j] == 'W':
cnt2 += 1
else:
if chess[i][j] == 'W': # 시작 흰색
cnt1+=1
if chess[i][j] == 'B':
cnt2 +=1
cnt.append(min(cnt1, cnt2)) # 8x8 체스판 다시 칠하는 정사각형 최소 개수
print(min(cnt))
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
백준 2667 단지번호 붙이기 파이썬 (0) | 2023.05.09 |
---|---|
DFS, BFS (0) | 2023.05.08 |
재귀 함수 (0) | 2023.05.07 |
백준 1021 회전하는 큐 파이썬 (0) | 2023.05.06 |
스택, 큐, 덱 파이썬으로 구현 (0) | 2023.05.06 |
Comments