본문 바로가기

Study/algorithms

[백준] 1018 체스판 다시 칠하기

반응형

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

모든칸을 한칸씩 돌면서 문자가 바뀌는지 확인하면 최악의 경우의 수를 따져보니까

대충 이렇게 나와서 왠지 그냥 다돌아도 시간초과 안날 것 같아서 다 돌기로 했다.

package main

import (
	"bufio"
	"fmt"
	"os"
)

var writer = bufio.NewWriter(os.Stdout)
var reader = bufio.NewReader(os.Stdin)

func printf(f string, a ...interface{}) { fmt.Fprintf(writer, f, a...) }
func scanf(f string, a ...interface{})  { fmt.Fscanf(reader, f, a...) }

var table [51]string
var n, m int

func toggleC(c *byte) {
	if *c == 'W' {
		*c = 'B'
	} else {
		*c = 'W'
	}
}

func check(i, j, m int, start byte) (result int) {
	c := start
	for k := i; k < i+8; k++ {
		for l := j; l < j+8; l++ {
			if table[k][l] == c {
				result++
			}
			if result >= m {
				return
			}
			toggleC(&c)
		}
		toggleC(&c)
	}
	return
}

func min(a, b int) int {
	if a < b {
		return a
	} else {
		return b
	}
}

func main() {
	defer writer.Flush()

	scanf("%d %d\n", &n, &m)

	for i := 0; i < n; i++ {
		scanf("%s\n", &table[i])
	}

	var minmin = 2500
	for i := 0; i <= n-8; i++ {
		for j := 0; j <= m-8; j++ {
			r := min(check(i, j, minmin, 'W'),
				check(i, j, minmin, 'B'))
			if minmin > r {
				minmin = r
			}
		}
	}
	printf("%d\n", minmin)
}

'Study > algorithms' 카테고리의 다른 글

[백준] 2751 수 정렬하기 golang  (0) 2020.01.25
[백준] 1436 영화감독 숌  (0) 2020.01.24
[백준] 7568 덩치  (0) 2020.01.22
[백준] 2231 분해합  (0) 2020.01.21
[백준] 2798 블랙잭  (0) 2020.01.21