일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- C++
- react-redux
- Redux
- 프로그래머스
- 파이썬
- 일상
- js to ts
- Spring
- 분할메모리할당
- 백준
- web
- 코드업
- 자료구조
- memory
- 스프링
- react
- Operating System
- 공부
- OS
- error
- Java
- 리덕스장바구니
- 타입스크립트
- 알고리즘
- 정렬
- 토이프로젝트
- codeup
- CPU 스케줄링
- 협업
- 기초100제
- Today
- Total
목록알고리즘 (147)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) nums = list(map(int, input().split())) op = list(map(int, input().split())) minRes, maxRes = int(1e9), -int(1e9) res = nums[0] # 첫번째 숫자 뒤 부터 연산자와 숫자가 나오기 때문 def dfs(idx): global res global minRes, maxRes if idx == n: if res maxRes: maxRes = res return for i in range(4): temp = res if op[i] > 0: if i ..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline def col(x, n): for i in range(9): if n == graph[x][i]: return False return True def row(y, n): for i in range(9): if n == graph[i][y]: return False return True def rect(x, y, n): nx = x // 3 * 3 ny = y // 3 * 3 for i in range(3): for j in range(3): if n == graph[nx + i][ny + j]: return False return True def dfs(idx): if idx == len(blank): # 마지막 0까지..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) graph = [0] * n count = 0 def is_promising(x): for i in range(x): if graph[x] == graph[i] or abs(graph[x] - graph[i]) == x - i: return False return True def queen(x): global count if x == n: count += 1 return else: for i in range(n): graph[x] = i if is_promising(x): queen(x+1) queen(0) print(count) ✔ 설명 #Tip 1. 굳이 2차원 배열을 쓸 필요가 없다...
✔ 문제 ✔ 풀이 👾 내 풀이 (216ms) import sys input = sys.stdin.readline n, m = map(int, input().split()) res = [] def dfs(x): if len(res) == m: print(' '.join(map(str, res))) return for i in range(x, n+1): if i >= x: res.append(i) dfs(i) res.pop() dfs(1) ⭐ 다른 풀이 (176ms) import sys input = sys.stdin.readline n, m = map(int, input().split()) s = [] def dfs(x): if len(s) == m: print(*s) return for i in rang..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) res = [] def dfs(): if len(res) == m: print(' '.join(map(str, res))) return for i in range(1, n+1): res.append(i) dfs() res.pop() dfs() ✔ 설명 15650번과 다르게 for문에서 중복을 확인하는 if문이 삭제되었다. ✔ 후기 당연히.. if문만 지우면 될거라 했는데 if문 뿐만 아니라 dfs() 인자값도 제거했어야 했다... 역시 쉬워보여도 늘 쉽지 않지 (つ﹏
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) res = [] def dfs(x): if len(res) == m: print(' '.join(map(str, res))) return for i in range(x, n+1): if i not in res: res.append(i) dfs(i + 1) res.pop() dfs(1) ✔ 설명 재귀함수를 이용해서 풀 수 있다. for문에서 (시작, n+1)까지를 범위로 잡아 dfs를 돌면 된다. ex) dfs(1) > res[1] > dfs(2) > res[1, 2] > dfs(3) > len(res) == 2 이므로 print, return > pop() > ..
빅 오 표기법의 정의 Big-O notation은 알고리즘의 시간 복잡도를 나타내는 표기법이며, O(f(n))으로 나타낸다. 그런데 여기서 시간 복잡도란 무엇일까? 시간 복잡도 알고리즘 분석에서는 2가지의 측면을 고려할 수 있다. 알고리즘의 수행시간과 알고리즘이 필요로 하는 기억 공간의 양이 그것이다. 알고리즘 수행 시간 분석을 시간 복잡도(time complexity)라고 하고 알고리즘이 사용하는 기억 공간 분석을 공간 복잡도(space complexity)라고 한다. 대게 알고리즘이 차지하는 공간보다 수행 시간에 더 관심이 있기 때문에 알고리즘의 복잡도는 대게 시간 복잡도를 말한다. 시간 복잡도는 알고리즘의 절대적인 수행 시간을 나타내는 것이 아니라(000ms) 알고리즘을 이루고 있는 연산들이 몇 번..
✔ 문제 ✔ 풀이 🌱 itertools 없이 풀기 (재귀 사용) import sys input = sys.stdin.readline def perm(arr, n): res = [] if n == 0: return [[]] for i in range(len(arr)): x = arr[i] for j in perm(arr[:i] + arr[i+1:], n-1): res.append([x] + j) return res n, m = map(int, input().split()) arr = [i for i in range(1, n+1)] ans = perm(arr, m) for i in ans: print(*i) ⭐ itertools 사용 from itertools import permutations n, m =..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline def t_count(x): ans = 0 while x != 0: x //= 2 ans += x return ans def f_count(x): ans = 0 while x != 0: x //= 5 ans += x return ans n, m = map(int, input().split()) print(min(t_count(n) - t_count(n - m) - t_count(m), f_count(n) - f_count(n-m) - f_count(m))) ✔ 설명 입력 값이 최대 2억까지 들어올 수 있기 때문에 팩토리얼로 문제를 풀게되면 시간초과가 날 수 있다. 끝자리가 0이 나올려면 2x5 쌍이 필요하기 때문에 2,..
✔ 문제 ✔ 풀이 😲 Recursion Error 코드 import sys input = sys.stdin.readline def factorial(x): if x == 1: return x return x * factorial(x-1) n = int(input()) fac = list(map(int, str(factorial(n)))) res = 0 for i in range(len(fac) - 1, -1, -1): if fac[i] == 0: res += 1 else: break print(res) 재귀가 깊어질 때 나는 오류이다 👻 정답 코드 import sys input = sys.stdin.readline def factorial(x): ans = 1 for i in range(1, x+1): ..