본문 바로가기

Study/algorithms

[백준] 9663 N-Queen

반응형

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

학교에서 배운거라 문제도 안읽고 그냥 풀었는데

학교에서 배운 n-queen이랑 달라서 `맞는데 왜 틀렸지` 상황이 나왔다. 역시 문제를 열심히 읽어야한다.

 

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 [][]int
var n int

func isPossible(x, y int) bool {
	for i := 0; i <= x; i++ {
		if table[i][y] == 1 {
			return false
		}
		if x-i >= 0 && y-i >= 0 && table[x-i][y-i] == 1 {
			return false
		}
		if x-i >= 0 && y+i < n && table[x-i][y+i] == 1 {
			return false
		}
	}
	return true
}

func putput(x, y int) (result int) {
	table[x][y] = 1
	if x == n-1 {
		return 1
	}
	for i := 0; i < n; i++ {
		if isPossible(x+1, i) {
			result += putput(x+1, i)
			table[x+1][i] = 0
		}
	}
	return
}

func main() {
	defer writer.Flush()
	scanf("%d\n", &n)

	table = make([][]int, n)
	for i := 0; i < n; i++ {
		table[i] = make([]int, n)
	}

	result := 0
	for i := 0; i < n; i++ {
		result += putput(0, i) // 첫째줄부터 간다
		table[0][i] = 0
	}
	printf("%d\n", result)
}

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

[백준] 2748 피보나치 수 2  (0) 2020.02.03
[백준] 14888 연산자 끼워넣기  (0) 2020.01.29
[백준] 15652 N과 M (4)  (0) 2020.01.27
[백준] 15651 N과 M (3)  (0) 2020.01.27
[백준] 15649 N과 M (1)  (0) 2020.01.26