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 | 31 |
Tags
- Python
- 덩치
- 퇴각검색
- 스프링프레임워크
- 그리디알고리즘
- 백트래킹
- 스프링
- 그리디
- 동적
- sort
- DFS
- 스택
- 최빈값
- 월간 코드 챌린지 시즌2
- 소트
- 2중포문
- 프로그래머스
- 코딩테스트
- Backtracking
- 404에러
- 최단거리
- 백준
- 브루트포스
- 다익스트라
- 통계학
- 동적계획법
- 소트인사이드
- 파이썬
- 코테
- 정렬
Archives
- Today
- Total
취준생의 코딩테스트 연습기
[백준] 1018번 체스판 다시 칠하기 파이썬(python) 본문
# 문제 링크
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
# Solution(실패) - 반례를 생각하지 않아서 실패
*반례 -> 8x8 크기로 잡은 판의 첫색의 색이 'W'더라도 'B'인 경우도 같이 확인
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
|
n,m = map(int, input().split(' '))
board = []
for _ in range(n):
board.append(input())
cnt = 8*8
for i in range(n):
if n-i>=8:
for j in range(m):
chk = 0
if m-j>=8:
first_color = board[i][j]
no = 0
for n1 in range(i,i+8):
for n2 in range(j,j+8):
if first_color=='W':
if no%2==0 and board[n1][n2] != 'W': # W
chk+=1
elif no%2!=0 and board[n1][n2] != 'B':
chk+=1
else:
if no%2==0 and board[n1][n2] != 'B': # W
chk+=1
elif no%2!=0 and board[n1][n2] != 'W':
chk+=1
no+=1
no+=1
# 최솟값 구하기
if cnt > chk:
cnt = chk
print(cnt)
|
cs |
# Solution(성공)
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
|
n,m = map(int, input().split(' '))
board = []
for _ in range(n):
board.append(input())
# 8x8판으로 보기 ,왼쪽위 기준지점 찾기
cnt = 8*8
for i in range(n):
if n-i>=8:
for j in range(m):
chk1 = 0
chk2 = 0
if m-j>=8:
no = 0
for n1 in range(i,i+8):
for n2 in range(j,j+8):
if no%2==0:
if board[n1][n2] != 'W':
chk1+=1
if board[n1][n2] != 'B':
chk2+=1
else:
if board[n1][n2] != 'B':
chk1+=1
if board[n1][n2] != 'W':
chk2+=1
no+=1
no+=1
# 최솟값 구하기
cnt = min(cnt,chk1,chk2)
print(cnt)
|
cs |
6. 최소값이 64개보다는 적을것이므로 임의로 64로 지정 (64보다 더 큰 숫자도 사용가능)
8. 10. 2중 포문을 이용하여 8x8 체스판의 왼쪽위 기준점 잡기
9. 13. 8x8 체스판일 경우 기준점은 i=0, j=0인 지점만 기준점일 수 있다.
따라서 가로, 세로가 8보다 작아지는 경우에는 배제하기 위해 사용한 if문
10. 왼쪽위 기준점이 'W'일 경우의 최소값을 구하기위한 변수
11. 왼쪽위 기준점이 'B'일 경우의 최소값을 구하기위한 변수
13. 기준점을 기준으로 8x8 체스판의 몇번째 칸인지 확인하기위한 변수
(27. 다음 행으로 넘어가게되면 wb의 순서가 bw로 되므로 +1을 해준다.)
14. 15. 위의 2중 포문은 기준점을 잡기위한 루프문이고, 기준점을 이용하여 구한 8x8 체스판에서 잘못 색칠된 부분을 찾기 한개씩 체크하기위한 for문이다.
16. no의 홀짝을 이용하여 잘못된 색칠된 부분을 체크
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 2108번 통계학 파이썬(python) (0) | 2021.03.09 |
---|---|
[백준] 2750번 수 정렬하기 파이썬(python) (0) | 2021.03.09 |
[백준] 1436번 영화감독 숌 파이썬(python) (0) | 2021.03.08 |
[백준] 7568번 덩치 파이썬(python) (0) | 2021.03.06 |
[백준] 2231번 분해합 파이썬(python) (0) | 2021.03.06 |
Comments