๐ ํ๋ก๊ทธ๋๋จธ์ค ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ
์ ํ์ ์ธ dfs, bfs ๋ฌธ์ ์ด๋ค ๋ด๊ฐ ์ฌ๊ท์ ์ฝํํธ์ธ๋ฐ ๊ทธ๋๋ ๋๋ฆ ๋ง์ด ์ต์ํด์ ธ์ ๋ฌธ์ ๋ฅผ ๋ดค์๋ ๋์ ์ง๊ฐ ์์์ง๋ง, ๊ทธ๋๋ ์ง๊ธ์ ์ด๋ป๊ฒ ์ ๊ทผ ํด์ผํ ์ง ๋๋์ด ์ค๊ธฐ๋ ํ๋ค.def solution(maps): import math from collections import deque last_row, last_col = len(maps[0]) - 1, len(maps) - 1 MAX = math.inf visited = [[MAX] * (last_row + 1) for x in range(last_col + 1)] # ๋์๋จ๋ถ dx = [1, -1, 0, 0] dy = [0, 0, -1, 1] result = [] stack = deque([(0, 0, 1)]) cnt = 0 while stack: cnt += 1 x, y, cnt_val = stack.popleft() if x == last_row and y == last_col: result.append(visited[y][x]) for i in range(4): n_x, n_y = x + dx[i], y + dy[i] if 0 <= n_x <= last_row and 0 <= n_y <= last_col: if maps[n_y][n_x] == 1: if visited[n_y][n_x] < cnt_val + 1: continue visited[n_y][n_x] = cnt_val + 1 stack.append((n_x, n_y, cnt_val + 1)) if result: print(cnt) return min(result) return -1
- ํ๋ค ํ๋ค DFS๋ก DP๊น์ง ์์ด์ ๋๊น์ง ํด๋ณด์๋๋ฐ ํจ์จ์ฑ์์ ํ๋๋ ์์ฝ์ง ์๊ฒ ๋ชจ๋ ์คํจํ๋ค ใ ใ
์ด ๋ฌธ์ ๋ก ์ด์ ๋จธ๋ฆฌ์์ ๊ฐ์ธ๋์๋ค. ์ต๋จ๊ฑฐ๋ฆฌ๋ BFS ๋ก ํธ๋๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๋๊ฒ.
์ฒ์์ DFS ๋ก ์ ๊ทผํ์ฌ ๊ผญ ํ๊ณ ์ถ์ด์ visited์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํด์ฃผ๋ฉฐ ๊ธฐ๋กํ์๋๋ฐ ํจ์จ์ฑ์์ ๋จ์ด์ง๋ ๊ฒ ๋ณด๋ ์ ๋ฌธ์ ๋ BFS ์๋๋ฉด ์๋ ๊ฒ ๊ฐ๋ค...
์๋๋ BFS๋ก ๋ค์ ํผ ๋ฌธ์ - ๋ row์ column ์ ๋ํด์ ๋๋ ๋ค๋ฅธ ์์ผ๋ก ํ๊ธฐ๋ฅผ ํ์๋๋ฐ ํ -> x ์ถ row -> ํ์ ์๋ ์๋ฃ ์ ๋ก ํ๊ธฐ๋ฅผ ํ์๋ค.
ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ๊ธฐ๋ฅผ ํ๋ฉด ๊ฐ์์ฑ์ด ์ข์ง ์๊ณ ํ๋ ฌ์ ๋์ ํ ๋ row, x, col, y๋ฅผ ์๋ก ๋ฐ๋๋ก ๋์ ํด ์ฃผ์ด์ผ ํด์ ๋๋ง ์์๋ณด๊ธฐ ์ฌ์ ๋ค.
์๋ ํ์ด๋ row -> row์ ๊ฐ์ ; col -> column์ ๊ฐ์ ๋ก ํ๊ธฐํ์ฌ ๊ฐ์์ฑ์ด ์ข์? ์ก๋ค. ใ ใ ์ด์ ์ ๋ ์๊น๋จน๊ณ ์ ์ธ ๊ฒ ๊ฐ๋ค.def solution(maps): from collections import deque total_row, total_col = len(maps) - 1, len(maps[0]) - 1 cnt = 0 queue = deque() queue.append([0, 0]) visited = [[0]*(total_col + 1) for _ in range(total_row + 1)] visited[0][0] = 1 # ๋์๋จ๋ถ dr, dc = [1, -1, 0, 0], [0, 0, -1, 1] while queue: current_r, current_c = queue.popleft() if current_r == total_row and current_c == total_col: return visited[current_r][current_c] for i in range(4): next_r, next_c = dr[i] + current_r, dc[i] + current_c if 0 <= next_r <= total_row and 0 <= next_c <= total_col: if maps[next_r][next_c] == 1 and not visited[next_r][next_c]: visited[next_r][next_c] = visited[current_r][current_c] + 1 queue.append((next_r, next_c)) return -1
์ง์ง BFS, DFS ์ดํด๋ ๋์ง๋ง ํ๋ ์์์ด ์๋ผ์ ๋ง๋งํ์๋๋ฐ ์ญ์ ์๊ฐ์ด ๋ต์ธ๊ฐ๋ณด๋ค.
์ก๊ณ ๊ณ์ ํ๋๊น ์๋ฒฝํ ์ดํดํ๋ค. ์ด์ ๋ ๋จธ๋ฆฌ์์์ ์ง๋๋ก ๊ทธ๋ ค์ง๋ ๊ฒ ๊ฐ๋ค.
์ ๋ฐฉ์๋๋ก(BFS) ๋ก ํธ๋ ํจ์จ์ฑ ๋ฐ๋ก ํต๊ณผ ใ
ํ ์คํธ ์ผ์ด์ค ํต๊ณผ ์๊ฐ๋ ํจ์ฌ ๋นจ๋ผ์ก๋ค. ๊ตณ๊ตณ ๋๋ฌด ๊ธฐ๋ถ ์ข๋ค.
๐ DFS ๋ฌธ์ ๋ฅผ ํ๋ ๋ ํ์๋๋ฐ ์ด๊ฑด ์ฌ์ฐ๋ ํผ ๋ฐฉ์๋ง ์ฌ๋ฆฌ๊ฒ ๋ค.
ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ๋๋ฒdef solution(numbers, target): result = [] def dfs(number, temp): if not number: if temp == target: result.append(1) return temp_num = number.pop() dfs(number[:], temp + temp_num) dfs(number[:], temp - temp_num) num = numbers.pop() dfs(numbers[:], -num) dfs(numbers[:], num) return len(result)
๐ Django authenticate ์ฌ์ฉ ์
user = authenticate(request, username=username, password=password)
DB ๋ ์ ์์ผ๋ก ๋ค์ด๊ฐ๊ณ POST ๋ก ๋ฐ์ดํฐ๋ ์ ๋์ด์๋๋ฐ user ๊ฐ ๊ณ์ None์ด ๋ฐ๋!!!
์ฅ๊ณ ์์ ๊ธฐ๋ณธ ์ ๊ณต์ค์ธ AbstractUser ๋ฅผ ์์๋ฐ์ user model์ ๋ง๋ค์ด ๋ก๊ทธ์ธ ํ์๊ฐ์ ํ ์คํธ๋ฅผ ํ๋๋ฐ ๋ก๊ทธ์ธ, ์ฆ ์ ์ฝ๋์ user ์ ๋ฐ์ดํฐ๊ฐ ์๊พธ ์๋ค๊ณ ํ๋ ๊ฒ์ด์๋ค.๐ก ์ด์ ๋ ๋ด๊ฐ PW ์ ์ฅ ์ DB์ ์ ๋ชป ์ ์ฅํ์๊ธฐ ๋๋ฌธ...
user_table.username = request.POST.get('username') user_table.set_password(request.POST.get('password'))
Django์์ AbstractUser ๋ชจ๋ธ์ ์์๋ฐ์ ์ฌ์ฉํ ๋ DB์ set_password ํจ์๋ก ์ ์ฅ์ ํ์ฌ์ผ ์ํธํ ํ์ฌ ์ ์ฅํ์ฌ authenticate๋ก ๊ฒ์ฆ์ด ๊ฐ๋ฅํด ์ง๋ค.
๊ฒ์ฆ ์ decoding์ ํ๋ ๊ฒ์ด ์๋ ๊ฐ์ ๊ฐ์ encoding ํ์ฌ ์ ์ฅ๋ ๊ฐ์ด๋ ๋น๊ตํ๊ธฐ ๋๋ฌธ