SOLUTION INFO
C++ · main.cpp
- 작성자
- tony9402
- 공동 작성자
- 없음
#include<bits/stdc++.h>
using namespace std;
int N, M, Map[33][33]; // 1-index
int answer = 0;
bool check(int y, int x) {
return Map[y-1][x] && Map[y][x-1] && Map[y-1][x-1];
}
void go(int usedCnt) {
if(usedCnt == N * M) {
answer ++;
return ;
}
int y = usedCnt / M + 1;
int x = usedCnt % M + 1;
go(usedCnt + 1);
if(!check(y, x)) {
Map[y][x] = 1;
go(usedCnt + 1);
Map[y][x] = 0;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
go(0);
cout << answer;
return 0;
}
SOLUTION DESCRIPTION
풀이 설명
등록된 풀이 설명이 없습니다.
SOLUTION INFO
Java · Main.java
- 작성자
- tony9402
- 공동 작성자
- 없음
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
static int [][]map;
static int N, M;
static int answer;
static public void main(String[] args) {
FastReader rd = new FastReader();
N = rd.nextInt();
M = rd.nextInt();
map = new int[N + 1][M + 1]; // 1-index
dfs(0);
System.out.println(answer);
}
static void dfs(int cnt) {
if(cnt == N * M) {
answer ++;
return ;
}
int y = cnt / M + 1;
int x = cnt % M + 1;
if(map[y - 1][x] == 1 && map[y][x - 1] == 1 && map[y - 1][x - 1] == 1) { // 현재 놓을 수 없는 곳
dfs(cnt + 1);
}
else {
dfs(cnt + 1); // 선택 안하고 다음껄 볼 경우
map[y][x] = 1;
dfs(cnt + 1); // 선택 하고 다음껄 볼 경우
map[y][x] = 0;
}
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while(st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
}
catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() { return Integer.parseInt(next()); }
long nextLong() { return Long.parseLong(next()); }
double nextDouble() { return Double.parseDouble(next()); }
String nextLine() {
String str = "";
try {
str = br.readLine();
}
catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
SOLUTION DESCRIPTION
풀이 설명
등록된 풀이 설명이 없습니다.
SOLUTION INFO
Python · main.py
- 작성자
- tony9402
- 공동 작성자
- 없음
import sys
def input():
return sys.stdin.readline().rstrip()
N, M = map(int, input().split())
# 1-index
Map = [ [ 0 for _ in range(M + 1) ] for __ in range(N + 1) ]
answer = 0
def dfs(cnt):
global answer
if cnt == N * M:
answer += 1
return
y = cnt // M + 1
x = cnt % M + 1
dfs(cnt + 1)
if Map[y - 1][x] == 0 or Map[y][x - 1] == 0 or Map[y - 1][x - 1] == 0: # 만약 놓을 수 있는 곳이라면
Map[y][x] = 1
dfs(cnt + 1)
Map[y][x] = 0
dfs(0)
print(answer)
SOLUTION DESCRIPTION
풀이 설명
등록된 풀이 설명이 없습니다.