From 5ceb7b465e897e5dc4675601ff78fb0f1ae30c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=84=9D?= <76719828+pxxnxx@users.noreply.github.com> Date: Tue, 9 May 2023 08:49:08 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=8C=EA=B3=A0=EB=A6=AC=EC=A6=98=2012?= =?UTF-8?q?=EC=A3=BC=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 알고리즘 12주차 --- ...54\354\232\260\353\243\250\354\212\244.py" | 42 +++++++++++++++++++ ...34\353\252\205\353\240\271\354\226\264.py" | 41 ++++++++++++++++++ ...21\352\266\201\353\214\200\355\232\214.py" | 35 ++++++++++++++++ ...40\354\235\270\355\226\211\354\202\254.py" | 38 +++++++++++++++++ ...64\354\247\204\355\212\270\353\246\254.py" | 41 ++++++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 "12\354\243\274\354\260\250/Main_22255_\355\230\270\354\204\235\354\202\254\354\232\260\353\243\250\354\212\244.py" create mode 100644 "12\354\243\274\354\260\250/Programmers_\353\257\270\353\241\234\355\203\210\354\266\234\353\252\205\353\240\271\354\226\264.py" create mode 100644 "12\354\243\274\354\260\250/Programmers_\354\226\221\352\266\201\353\214\200\355\232\214.py" create mode 100644 "12\354\243\274\354\260\250/Programmers_\354\235\264\353\252\250\355\213\260\354\275\230\355\225\240\354\235\270\355\226\211\354\202\254.py" create mode 100644 "12\354\243\274\354\260\250/Programmers_\355\221\234\355\230\204\352\260\200\353\212\245\355\225\234\354\235\264\354\247\204\355\212\270\353\246\254.py" diff --git "a/12\354\243\274\354\260\250/Main_22255_\355\230\270\354\204\235\354\202\254\354\232\260\353\243\250\354\212\244.py" "b/12\354\243\274\354\260\250/Main_22255_\355\230\270\354\204\235\354\202\254\354\232\260\353\243\250\354\212\244.py" new file mode 100644 index 0000000..a38bc62 --- /dev/null +++ "b/12\354\243\274\354\260\250/Main_22255_\355\230\270\354\204\235\354\202\254\354\232\260\353\243\250\354\212\244.py" @@ -0,0 +1,42 @@ +import sys +from heapq import heappop, heappush +input = sys.stdin.readline + + +def dijkstra(): + visit = [[[1e9 for _ in range(m)] for _ in range(n)] for _ in range(3)] + visit[1][sy-1][sx-1] = 0 + heap = [[0, 1, sy-1, sx-1]] + while heap: + weight, num, y, x = heappop(heap) + if weight > visit[num][y][x]: + continue + if num == 0: + for i in range(4): + yy = y + d[i] + xx = x + d[i-1] + if 0 <= yy < n and 0 <= xx < m and arr[yy][xx] != -1 and visit[1][yy][xx] > weight + arr[yy][xx]: + visit[1][yy][xx] = weight + arr[yy][xx] + heappush(heap, [visit[1][yy][xx], 1, yy, xx]) + elif num == 1: + for i in range(2): + yy = y + d[i*2+1] + xx = x + if 0 <= yy < n and 0 <= xx < m and arr[yy][xx] != -1 and visit[2][yy][xx] > weight + arr[yy][xx]: + visit[2][yy][xx] = weight + arr[yy][xx] + heappush(heap, [visit[2][yy][xx], 2, yy, xx]) + else: + for i in range(2): + yy = y + xx = x + d[i*2+1] + if 0 <= yy < n and 0 <= xx < m and arr[yy][xx] != -1 and visit[0][yy][xx] > weight + arr[yy][xx]: + visit[0][yy][xx] = weight + arr[yy][xx] + heappush(heap, [visit[0][yy][xx], 0, yy, xx]) + return min(visit[0][ey-1][ex-1], min(visit[1][ey-1][ex-1], visit[2][ey-1][ex-1])) + +n, m = map(int, input().split()) +sy, sx, ey, ex = map(int, input().split()) +arr = [[*map(int, input().split())] for _ in range(n)] +d = [0, 1, 0, -1] +answer = dijkstra() +print(answer if answer != 1e9 else -1) \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/Programmers_\353\257\270\353\241\234\355\203\210\354\266\234\353\252\205\353\240\271\354\226\264.py" "b/12\354\243\274\354\260\250/Programmers_\353\257\270\353\241\234\355\203\210\354\266\234\353\252\205\353\240\271\354\226\264.py" new file mode 100644 index 0000000..cdedcf4 --- /dev/null +++ "b/12\354\243\274\354\260\250/Programmers_\353\257\270\353\241\234\355\203\210\354\266\234\353\252\205\353\240\271\354\226\264.py" @@ -0,0 +1,41 @@ +from collections import deque +import sys + +sys.setrecursionlimit(3000) + + +def solution(n, m, x, y, r, c, k): + def dfs(y, x, v): + if abs(r - y - 1) + abs(c - x - 1) > k - v: + return False + if y == r - 1 and x == c - 1 and v == k: + return True + if y + 1 < n: + string[y + 1][x][v + 1] = string[y][x][v] + "d" + if dfs(y + 1, x, v + 1): + return True + if x - 1 >= 0: + string[y][x - 1][v + 1] = string[y][x][v] + "l" + if dfs(y, x - 1, v + 1): + return True + if x + 1 < m: + string[y][x + 1][v + 1] = string[y][x][v] + "r" + if dfs(y, x + 1, v + 1): + return True + if y - 1 >= 0: + string[y - 1][x][v + 1] = string[y][x][v] + "u" + if dfs(y - 1, x, v + 1): + return True + + answer = '' + dy = [1, 0, 0, -1] + dx = [0, -1, 1, 0] + check = k - abs(r - x) - abs(c - y) + if check < 0 or check % 2: + return "impossible" + queue = deque([[x - 1, y - 1, 0]]) + string = [[["" for _ in range(k + 1)] for _ in range(m)] for _ in range(n)] + dfs(x - 1, y - 1, 0) + + answer = string[r - 1][c - 1][k] + return answer \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/Programmers_\354\226\221\352\266\201\353\214\200\355\232\214.py" "b/12\354\243\274\354\260\250/Programmers_\354\226\221\352\266\201\353\214\200\355\232\214.py" new file mode 100644 index 0000000..b0e41a1 --- /dev/null +++ "b/12\354\243\274\354\260\250/Programmers_\354\226\221\352\266\201\353\214\200\355\232\214.py" @@ -0,0 +1,35 @@ +def bf(info, ret, index, arrow, lion, apeach): + global diff + global answer + r = ret[:] + if index == 10 or arrow == 0: + r[10] += arrow + d = lion - apeach + if diff < d: + diff = d + answer = r + if diff != 0 and diff == d: + for i in range(10,-1,-1): + if answer[i] > r[i]: + break + elif answer[i] < r[i]: + answer = r + break + return + if arrow >= info[index]+1: + r[index] += info[index]+1 + bf(info, r, index+1, arrow-info[index]-1, lion+10-index, [apeach,apeach+index-10][info[index] != 0]) + bf(info, ret, index+1, arrow, lion, apeach) +diff = 0 +answer = [0]*11 + +def solution(n, info): + global answer + apeach = 0 + for i, v in enumerate(info): + if v: + apeach += 10-i + bf(info, [0]*11, 0, n, 0, apeach) + if not sum(answer): + answer = [-1] + return answer \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/Programmers_\354\235\264\353\252\250\355\213\260\354\275\230\355\225\240\354\235\270\355\226\211\354\202\254.py" "b/12\354\243\274\354\260\250/Programmers_\354\235\264\353\252\250\355\213\260\354\275\230\355\225\240\354\235\270\355\226\211\354\202\254.py" new file mode 100644 index 0000000..56edcbd --- /dev/null +++ "b/12\354\243\274\354\260\250/Programmers_\354\235\264\353\252\250\355\213\260\354\275\230\355\225\240\354\235\270\355\226\211\354\202\254.py" @@ -0,0 +1,38 @@ +# 1. 가입자 증가 +# 2. 판매액 증가 + +# 할인 비율이 일정 기준 이상 시 구매 +# 구매 비용 합이 일정 기준 이상 시 플러스 +answer = [0, 0] +maxRegist = 0 + + +def solution(users, emoticons): + def bf(idx, buy): + global answer, maxRegist + if idx == len(emoticons): + # print(buy) + regist = 0 + money = 0 + for i, v in enumerate(users): + if v[1] <= buy[i]: + regist += 1 + else: + money += buy[i] + if regist > maxRegist: + answer = [regist, money] + maxRegist = regist + elif regist == maxRegist: + answer[1] = max(answer[1], money) + return + price = emoticons[idx] + for per in range(10, 50, 10): + temp = buy[:] + for i, v in enumerate(users): + if v[0] <= per: + temp[i] += price * (100 - per) // 100 + bf(idx + 1, temp) + + bf(0, [0] * len(users)) + + return answer \ No newline at end of file diff --git "a/12\354\243\274\354\260\250/Programmers_\355\221\234\355\230\204\352\260\200\353\212\245\355\225\234\354\235\264\354\247\204\355\212\270\353\246\254.py" "b/12\354\243\274\354\260\250/Programmers_\355\221\234\355\230\204\352\260\200\353\212\245\355\225\234\354\235\264\354\247\204\355\212\270\353\246\254.py" new file mode 100644 index 0000000..72ecaa9 --- /dev/null +++ "b/12\354\243\274\354\260\250/Programmers_\355\221\234\355\230\204\352\260\200\353\212\245\355\225\234\354\235\264\354\247\204\355\212\270\353\246\254.py" @@ -0,0 +1,41 @@ +flag = True +leaf = 0 +def solution(numbers): + global flag, leaf + answer = [] + for x in numbers: + x = bin(x)[2:] + j = 2 + k = 0 + while j-1 < len(x): + j = j * 2 + k = k + 1 + for _ in range(len(x), j-1): + x = '0' + x + flag = True + leaf = 0 + if x[len(x)//2] == '0': + answer.append(0) + continue + if len(x) == 1: + answer.append(1) + continue + back(x, len(x)//2, 2**(k-1), True) + answer.append(int(flag)) + return answer + +def back(chr, num, dep, key): + global flag, leaf + if dep == 0: + if chr[num] == '0': + leaf += 1 + elif not key: + flag = False + return + if chr[num] == '1' and not key: + flag = False + return + if chr[num] == '0': + key = False + back(chr, num - dep, dep//2, key) + back(chr, num + dep, dep//2, key)