[백준]1018번 체스판 다시 칠하기 - 완전 탐색

2021. 2. 23. 16:35·SW개발/코딩테스트

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

 

 

n, m = map(int, input().split())

chess = [[0] * m for i in range(n)]
for i in range(n):
    chess[i] = list(input())
change = 32  # 가장 최대로 많이 바꾸는 경우
for i in range(n):
    for j in range(m):
        if i + 8 <= n and j + 8 <= m:  # 인덱스 에러를 방지하기 위한 구문
            cnt1 = 0  # 시작을 W로 할 때 칠하는 숫자
            cnt2 = 0  # 시작을 B로 할 때 칠하는 숫자
            for x in range(8):
                for k in range(8):
                    if (x + k) % 2 == 0:  # 체스판의 짝수 번호 판별
                        if chess[x + i][k + j] != 'W':  # 시작을 W로 보았을 경우
                            cnt1 += 1
                        if chess[x + i][k + j] != 'B':  # 시작을 B로 보았을 경우
                            cnt2 += 1
                    else:  # 체스판이 홀수 번호 일때
                        if chess[x + i][k + j] != 'B':  # 시작을 W로 보았을 경우
                            cnt1 += 1
                        if chess[x + i][k + j] != 'W':  # 시작을 B로 보았을 경우
                            cnt2 += 1
            change = min(cnt1, cnt2, change)  # change, cnt1, cnt2 중 가장 적은수로 갱신
print(change)

 

코드 설명

체스판의 크기만큼 이중 반복문을 수행한다. 그 안에서  8*8 크기의 체스판을 구하기 위해 이중 반복문을 내부 반복문으로 수행한다.

체스판이 짝수인 경우와 홀수인 경우로 나눠서 생각한다. 그 안에서 시작이 W로 하는경우와 B로 하는 경우를 체크하며 바꿔 칠해야 할 체스판의 수를 체크한다.

 

Point : 체스판의 색을 가장 많이 칠하는 경우는 모두 W이거나 B인 경우, 즉 64의 절반인 32가 최댓값이 된다. change 횟수의 최댓값으로 초기화한다.

체스판의 짝수화 홀수를 통하여 색이 번갈아가며 진행되는지 판별한다. 그렇지 않은경우에는 카운트를 해준다.

또한 체스판의 시작이 W, B 로 총 2가지의 경우가 존재할 수 있으므로 cnt1, cnt2를 이용해 각각 카운트를 하여야 한다.

최종적으로 change와 cnt1(바꿔 칠해야 하는 값), cnt2 중 가장 적은 값을 선택해 정답을 출력한다.

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[백준]1065번 한수 - 완전 탐색  (0) 2021.02.25
[백준]1436번 영화감독 숌 - 완전 탐색  (0) 2021.02.24
[백준]7568번 덩치 - 완전 탐색  (0) 2021.02.22
[백준]2231번 분해합 - 완전 탐색  (0) 2021.02.21
[백준]2798번 블랙잭 - 완전 탐색  (0) 2021.02.20
'SW개발/코딩테스트' 카테고리의 다른 글
  • [백준]1065번 한수 - 완전 탐색
  • [백준]1436번 영화감독 숌 - 완전 탐색
  • [백준]7568번 덩치 - 완전 탐색
  • [백준]2231번 분해합 - 완전 탐색
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    음식
    배달
    배달비 공유
    라이프 스타일
    플레이스토어
    django
    g
    트리 #AVL #알고리즘 #자료구조
    Contributor
    오픈소스
    배공파용
    컨트리뷰터
    어플리케이션
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[백준]1018번 체스판 다시 칠하기 - 완전 탐색
상단으로

티스토리툴바