일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- 일상
- 정렬
- 타입스크립트
- 자료구조
- react
- Redux
- OS
- js to ts
- 분할메모리할당
- 협업
- C++
- react-redux
- web
- Operating System
- 백준
- 스프링
- 코드업
- Spring
- 파이썬
- 기초100제
- 알고리즘
- 토이프로젝트
- 리덕스장바구니
- CPU 스케줄링
- memory
- error
- 공부
- codeup
- 프로그래머스
- Today
- Total
목록Algorithm/BOJ (139)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 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() > ..
✔ 문제 ✔ 풀이 🌱 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): ..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline t = int(input()) for _ in range(t): n = int(input()) dic = {} for _ in range(n): cloth, category = input().split() if category in dic.keys(): dic[category] += 1 else: dic[category] = 1 res = 1 for key in dic: res *= (dic[key] + 1) print(res - 1) ✔ 설명 조합론 문제이다. 옷의 종류 별로 분류를 하여 (a 종류의 옷 개수 + 1) * (b 종류의 옷 개수 + 1) * ... - 1 (알몸인 경우) 와 같은 식을 세울 수 있다. 딕..