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 |
Tags
- GatherTown
- spring
- 다익스트라
- 백준코딩테스트
- 자바PS
- BFS
- 백준
- PS
- deque
- COSPRO
- dp
- 네트워크플로우
- 세그먼트트리
- 엘라스틱서치
- DFS
- 재귀함수
- 게더타운시작
- java
- QUICKSTARTGUIDE
- 시뮬레이션
- 우선순위큐
- 완전탐색
- 취득후기
- YBMCOS
- 01BFS
- 알고리즘
- COSPROJAVA1급
- 이젠 골드구현도 어렵네..
- 다이나믹프로그래밍
- 구현
Archives
- Today
- Total
공부공간
BOJ - 12100 ) 2048 (Easy) 본문
2048게임을 그대로 만들면된다.
DFS를 돌면서 현재 맵을 변형한 것을 인자로 넘겨주면서 5번까지 돌면서 가장 큰값을 리턴해주면된다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int answer = 0,N;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int map[][] = new int[N+1][N+1];
for(int y =1 ; y <=N ;y++) {
st = new StringTokenizer(br.readLine());
for(int x= 1; x<= N ; x++) {
map[y][x] = Integer.parseInt(st.nextToken());
}
}
DFS(map,0);
System.out.println(answer);
}
public static void DFS(int[][] map, int depth) {
if(depth == 5) {
for(int y = 1 ; y <= N ; y++) {
for(int x = 1; x <=N ; x++) {
answer = answer > map[y][x] ? answer : map[y][x];
}
}
return;
}
for(int index = 0 ; index < 4 ;index++) {
int copy_map[][] = Move(map,index);
DFS(copy_map,depth+1);
}
}
public static int[][] Move(int[][] map, int dir) {
int copy[][] = new int[N+1][N+1];
for(int index = 1 ; index <=N; index++) {
copy[index] = Arrays.copyOfRange(map[index], 0, N+1);
}
if(dir ==0) { // copy를 왼쪽으로 민경우
for(int y = 1 ; y<= N ; y++) {
int arr[] = new int[N+1]; int index= 0; boolean visit[] = new boolean[N+1];// index는 뭐가 들어있는 위치
for(int x = 1 ; x<=N ; x++) {
if(copy[y][x]==0) continue;
else {
if(index == 0) {
arr[index+1] = copy[y][x];
index++; // 0번째에 뭐가 들어있음
}
else {
if(arr[index] == copy[y][x] && !visit[index]) {
//같은경우 index는 증가시키지 말고 누적해준다.
arr[index] += copy[y][x];
visit[index] = true;
}
else {
arr[index+1] = copy[y][x];
index++;
}
}
}
}
copy[y] = Arrays.copyOf(arr, N+1);
}
return copy; //완료
}
else if(dir ==1) { // 오른쪽으로 민 경우
for(int y = 1 ; y<= N ; y++) {
int arr[] = new int[N+1]; int index= N+1; boolean visit[] = new boolean[N+1];// index는 뭐가 들어있는 위치
for(int x = N ; x >=1 ; x--) {
if(copy[y][x]==0) continue;
else {
if(index == N+1) {
arr[index-1] = copy[y][x];
index--; // 0번째에 뭐가 들어있음
}
else {
if(arr[index] == copy[y][x] && !visit[index]) {
//같은경우 index는 증가시키지 말고 누적해준다.
arr[index] += copy[y][x];
visit[index] = true;
}
else {
arr[index-1] = copy[y][x];
index--;
}
}
}
}
copy[y] = Arrays.copyOf(arr, N+1);
}
return copy;
}
else if(dir ==2) { // 아래로 민 경우
for(int x = 1 ; x<= N ; x++) {
int arr[] = new int[N+1]; int index= N+1; boolean visit[] = new boolean[N+1];// index는 뭐가 들어있는 위치
for(int y = N ; y >=1 ; y--) {
if(copy[y][x]==0) continue;
else {
if(index == N+1) {
arr[index-1] = copy[y][x];
index--; // 0번째에 뭐가 들어있음
}
else {
if(arr[index] == copy[y][x] && !visit[index]) {
//같은경우 index는 증가시키지 말고 누적해준다.
arr[index] += copy[y][x];
visit[index] = true;
}
else {
arr[index-1] = copy[y][x];
index--;
}
}
}
}
for(int y = N ; y >=1 ; y--) {
copy[y][x] = arr[y];
}
}
return copy;
}
else if(dir ==3) { // 위로 민경우
for(int x = 1 ; x<= N ; x++) {
int arr[] = new int[N+1]; int index= 0; boolean visit[] = new boolean[N+1];// index는 뭐가 들어있는 위치
for(int y = 1 ; y<=N ; y++){
if(copy[y][x]==0) continue;
else {
if(index == 0) {
arr[index+1] = copy[y][x];
index++; // 0번째에 뭐가 들어있음
}
else {
if(arr[index] == copy[y][x] && !visit[index]) {
//같은경우 index는 증가시키지 말고 누적해준다.
arr[index] += copy[y][x];
visit[index] = true;
}
else {
arr[index+1] = copy[y][x];
index++;
}
}
}
}
for(int y = 1 ; y <=N ; y++) {
copy[y][x] = arr[y];
}
}
return copy;
}
return copy;
}
}
'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글
SWEA - 7394 ) 종구의 딸이름 짓기 (0) | 2020.03.03 |
---|---|
BOJ - 17472 ) 다리 만들기 2 (1) | 2020.02.27 |
SWEA - 2112 ) 보호 필름 (0) | 2020.02.20 |
BOJ -17142 ) 연구소3 (0) | 2020.02.18 |
BOJ- 11404 ) 플로이드 (0) | 2020.02.17 |
Comments