일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배낭 문제
- 모듈러 연산 분배법칙
- bfs
- 깊이 우선 탐색
- 클래스
- Python
- npm start
- 다이나믹 프로그래밍
- Container vs VM
- 그래프 이론
- 파이썬
- 그래프탐색
- db replication
- 나는 바보야...
- dfs
- lazy evaluation
- 일단 시도
- error:0308010C:digital envelope routines::unsupported
- LCS 알고리즘
- 구현
- 동적 계획법
- 문자열
- 그래프 탐색
- 정처기 필기
- 수학
- 최장공통부분문자열
- 너비 우선 탐색
- Docker 원리
- 냅색 알고리즘
- 최장공통부분수열
- Today
- Total
목록알고리즘 & SQL (30)
Save my data
dfs 개념이 활용된 문제이다. 처음에는 아래와 같이 깊이를 의미하는 d를 추가를 안했다. 그런데 아래와 같이 하면 idx를 층으로 쓴다는 얘기인데 그렇게 되면 '층'을 의미하는 원소와, '값(크기)'을 의미하는 원소간 의미 구분이 안된다. import sys def ans(idx): if idx >= 7: print(*res) return 0 for i in range(idx, t[0] + 1): res.append(t[i]) ans(i + 1) res.pop() while 1: t = [*map(int, sys.stdin.readline().split())] res = [] if t[0]: ans(1) else: break 그래서 '값(크기)'이 커져버리면 현재 '층' 수가 높은 것으로 착각되면서 탐..
프로그래머스 문제는 정말 오랜만에 푼다. 적응의 문제인지 어떤지 확실하지는 않지만 시간이 좀 걸렸다. 다시 보니 어려운 문제인 것 같지는 않는데 당분간 문제를 많이 풀면서 지켜봐야겠다. def solution(wallpaper): x = len(wallpaper) y = len(wallpaper[0]) lx = x - 1 ly = y - 1 rx = 0 ry = 0 for i in range(x): if "#" in wallpaper[i]: lx = min(lx, i) rx = max(rx, i + 1) for i in range(x): for j in range(y): if wallpaper[i][j] == '#': ly = min(ly, j) ry = max(ry, j + 1) answer = [lx..
너무 쉬운 문제인데 생각이 마치 어딘가 막힌 것 처럼 한 30분 넘게 붙잡고 있었던 것 같다. import sys N, M = map(int, sys.stdin.readline().split()) pokemon_name = {} pokemon_num = {} for i in range(1, N + 1): name = sys.stdin.readline().strip() pokemon_name[name] = str(i) pokemon_num[str(i)] = name for _ in range(M): q = sys.stdin.readline().strip() if q in pokemon_name: print(pokemon_name[q]) else: print(pokemon_num[q]) 딕셔너리를 두 개 만..
요구하는 대로만 구현하면 답인 구현 문제였다. import sys def gen(n, arr): if sum(arr) == n: print(f"{n} =", " + ".join(map(str, arr))) else: print(f"{n} is NOT perfect.") while 1: factors = [] N = int(sys.stdin.readline()) if N == -1: break for i in range(1, (N // 2) + 1): if not N % i: factors.append(i) gen(N, factors) 며칠동안 쉬운 문제만 풀면서 포스팅 했는데 다음주부터는 다시 그래프 문제를 풀어야겠다. 사실 백준 14502 연구소 문제에서 막혀서 구글링했는데, 보니까 백트래킹이라는 기법..
간단한 수학 문제이다. 각각 입력 받은 수를 n과 n이라고 했을 때, n를 m으로 나눴을 때 나머지가 있고 m을 n으로 나눴을 때 나머지가 없으면 "factor", 그 반대의 경우는 "multiple", 둘 다 나머지가 있는 경우는 "neither" 로 처리해주었다. 이번 문제는 파이썬 클래스의 getter와 setter를 학습하기 위하여 클래스를 선언하여 풀었다. import sys class MultiplesAndDivisors: def __init__(self): self.n = 0 self.m = 0 @property def answer(self): return self.__ans @answer.setter def answer(self, value): self.__n = value[0] self...
단순히 구현만 하면 되는 쉬운 문제였다. import sys score = { "A+" : 4.5, "A0" : 4.0, "B+" : 3.5, "B0" : 3.0, "C+" : 2.5, "C0" : 2.0, "D+" : 1.5, "D0" : 1.0, "F" : 0.0 } res = [] total_point = 0 for _ in range(20): subject, point, grade = sys.stdin.readline().split() point = float(point) if grade != 'P': res.append(point * score[grade]) total_point += point print(sum(res)/total_point) 오늘은 쉬어가는 차원에서 가벼운 문제만 풀었다.
재귀를 이용하여 풀 수 있는 쉬운 문제이다. 예전에 재귀함수쪽을 학습할 때 비슷한 문제를 푼 적이 있어서 쉽게 풀었다. import sys s = sys.stdin.readline().strip() l = len(s) - 1 def palindrome(front:int, rear:int, s:str) -> bool: if front >= rear: return 1 if s[front] == s[rear]: ans = palindrome(front + 1, rear - 1, s) return ans else: return 0 print(palindrome(0, l, s)) 자꾸 틀렸다고 나와서 코드를 이리저리 바꿔가면서 했는데도 안됬다. 한 네 번째 시도를 하고 다시 코드를 보니 sys.stdin.read..
BFS 문제이다. 부끄럽지만 계속 메모리 초과가 나서 구글링해서 올바른 해답을 찾은 문제이다. 실전에서는 이런 일이 발생하지 않도록 더 실력을 키워야겠다. 우선 문제가 트리 구조를 떠올리면 쉽게 풀 수 있을것이라고 생각은 했다. 어떤 입력 v 가 시작값으로 주어지면, 그 입력 v 에 대해 v - 1, v + 1, v * 2 가 v 의 자식 노드로 생겨나면서 노드의 값이 k 와 일치할 때, 그 노드가 속해있는 레벨을 구하면 되는 문제였다. DFS와 BFS에 대해 얼마 전에도 포스팅 한 적이 있는데, BFS는 트리의 각 레벨에 있는 모든 노드를 queue에 넣고 앞에서부터 pop 하면서 너비 우선으로 탐색하는 방식이다. 여기서 처음에 아이디어를 얻은 것은, queue에 각 층의 마지막 계산값들을 넣고 그 뒤..