diff --git a/tgyuuAn/DFS/2048 (Easy).py b/tgyuuAn/DFS/2048 (Easy).py new file mode 100644 index 00000000..77efca08 --- /dev/null +++ b/tgyuuAn/DFS/2048 (Easy).py @@ -0,0 +1,110 @@ +import sys, copy +N = int(input()) +pan = [] +ans = 0 + +for _ in range(N): + pan.append([int(x) for x in sys.stdin.readline().rstrip().split()]) + +def left(board): + for i in range(N): + cursor = 0 + for j in range(1, N): + if board[i][j] != 0: # 0이 아닌 값이 + tmp = board[i][j] + board[i][j] = 0 # 일단 비워질꺼니까 0으로 바꿈 + + if board[i][cursor] == 0: # 비어있으면 + board[i][cursor] = tmp # 옮긴다 + + elif board[i][cursor] == tmp: # 같으면 + board[i][cursor] *= 2 # 합친다 + cursor += 1 + else: # 비어있지도 않고 다른 값일때 + cursor += 1 # pass + board[i][cursor] = tmp # 바로 옆에 붙임 + + return board + +def right(board): + for i in range(N): + cursor = N - 1 + for j in range(N - 1, -1, -1): + + if board[i][j] != 0: + tmp = board[i][j] + board[i][j] = 0 + + if board[i][cursor] == 0: + board[i][cursor] = tmp + + elif board[i][cursor] == tmp: + board[i][cursor] *= 2 + cursor -= 1 + else: + cursor -= 1 + board[i][cursor] = tmp + return board + +def up(board): + for j in range(N): + cursor = 0 + for i in range(N): + if board[i][j] != 0: + tmp = board[i][j] + board[i][j] = 0 + + if board[cursor][j] == 0: + board[cursor][j] = tmp + + elif board[cursor][j] == tmp: + board[cursor][j] *= 2 + cursor += 1 + + else: + cursor += 1 + board[cursor][j] = tmp + return board + +def down(board): + for j in range(N): + cursor = N - 1 + for i in range(N - 1, -1, -1): + if board[i][j] != 0: + tmp = board[i][j] + board[i][j] = 0 + + if board[cursor][j] == 0: + board[cursor][j] = tmp + + elif board[cursor][j] == tmp: + board[cursor][j] *= 2 + cursor -= 1 + + else: + cursor -= 1 + board[cursor][j] = tmp + return board + +def dfs(n, arr): + global ans + if n == 5: + for i in range(N): + for j in range(N): + if arr[i][j] > ans: + ans = arr[i][j] + return + + for i in range(4): + copy_arr = copy.deepcopy(arr) + if i == 0: + dfs(n + 1, left(copy_arr)) + elif i == 1: + dfs(n + 1, right(copy_arr)) + elif i == 2: + dfs(n + 1, up(copy_arr)) + else: + dfs(n + 1, down(copy_arr)) + +dfs(0, pan) +print(ans) \ No newline at end of file diff --git a/tgyuuAn/README.md b/tgyuuAn/README.md index 9040821e..cbc8e16b 100644 --- a/tgyuuAn/README.md +++ b/tgyuuAn/README.md @@ -54,4 +54,5 @@ | 50차시 | 2024.04.01 | BFS | 열쇠 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/175 | 51차시 | 2023.04.07 | BFS | 과외맨 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/179 | 52차시 | 2023.05.06 | 위상정렬 | 게임 개발 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/182 +| 53차시 | 2023.05.09 | 백트래킹 | 2048 (Easy) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/184 ---