main 메소드가 있는 곳에 @EnableJPaAuditing 어노테이션을 추가해주면 행을 추가할 때마다 @CreatedDate 이 있는 속성 의 값이 자동으로 들어가고 @LastModifiedDate 어노테이션이 있는 속성에는 update시점의 시간을 자동으로 기록하게 된다.
해당 문제는 간단해 보였지만 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문 하라는 조건 때문에 응근히 까다롭게 느껴졌다.
n, m, v = map(int, input().split())
graph1 = {}
visited = list()
visited_dfs = list()
need_visited = list()
need_visited.append(v)
need_visited_dfs = list()
need_visited_dfs.append(v)
for _ in range(m):
key, value = map(int, input().split())
if key in graph1:
graph1[key].append(value)
else:
graph1[key] = [value]
while need_visited:
vertex = need_visited.pop(0)
if vertex not in visited:
visited.append(vertex)
if vertex in graph1:
need_visited.extend(graph1[vertex])
while need_visited_dfs:
vertex = need_visited_dfs.pop()
if vertex not in visited_dfs:
visited_dfs.append(vertex)
if vertex in graph1:
need_visited_dfs.extend(graph1[vertex])
print(visited)
print(visited_dfs)
위 코드가 처음에 작성한 코드였다. 정점 번호가 작은걸 우선 방문하라는 조건을 빼면 일반 DFS, BFS 기능은 나온 것 같다. 작은걸 우선 방문하라는 조건을 지키기 위해서는 DFS와 BFS의 정렬 순서가 역정렬이 되어야 조건을 충족시킬 수 있을 것으로 보인다.
아래 코드가 답코드이다.
from collections import deque
def dfs(v):
print(v, end= ' ')
visited[v] = True
for e in adj[v]:
if not(visited[e]):
dfs(e)
def bfs(v):
q = deque([v])
while q:
v = q.popleft()
if not(visited[v]):
visited[v] = True
print(v, end=' ')
for e in adj[v]:
if not visited[e]:
q.append(e)
n, m, v = map(int, input().split())
adj = [[] for _ in range(n+1)]
for _ in range(m):
x, y = map(int, input().split())
adj[x].append(y)
adj[y].append(x)
for e in adj:
e.sort()
visited = [False] * (n + 1)
dfs(v)
print()
visited = [False] * (n + 1)
bfs(v)
deque를 사용하는 이유는 그냥 list를 사용하는거 보다 성능상 유리한 면이 있어서인 것 같다.
N, S, M = map(int,input().split())
vols = list(map(int,input().split()))
sounds = list()
sounds.append(-1)
def vol_control(now,volumns, start, M):
if now !=N-1:
if start + volumns[now] <= M:
vol_control(now+1, volumns, start + volumns[now], M)
if start - volumns[now] >= 0:
vol_control(now+1, volumns, start - volumns[now],M)
else:
if start + volumns[now] <= M:
sounds.append(start + volumns[now])
if start - volumns[now] >= 0:
sounds.append(start - volumns[now])
vol_control(0,vols,S,M)
print(max(sounds))
위 문제를 위와같은 공식으로 풀었지만 메모리 초과 오류가 난다.
n, s, m = map(int, input().split())
array = list(map(int, input().split()))
dp = [[0]*(m+1) for _ in range(n+1)]
dp[0][s] = 1
for i in range(1, n+1):
for j in range(0, m+1):
if dp[i-1][j] != 0:
if j + array[i-1] <= m:
dp[i][j+array[i-1]] = 1
if j - array[i-1] >= 0:
dp[i][j-array[i-1]] = 1
result = -1
for i in range(m, -1, -1):
if dp[n][i] == 1:
result = i
break
print(result)
errorMessage: PRIMARY KEY 제약 조건 'WM_INSPECTIONRESULTHISTORY_PK'을(를) 위반했습니다. 개체 'dbo.WM_INSPECTIONRESULTHISTORY'에 중복 키를 삽입할 수 없습니다. 중복 값은 ~~ 입니다.
확인해보니
히스토리 테이블에 값을 넣을 때는 모든 경우에 새로운 키를 발생시켜 값을 할당하고 있다
다른 곳에 문제가 있어 보인다.
HISTORYKEY 에 currentEntity1.LASTHISTORYKEY 값을 받도록 되어있는데 이부분을 그냥dictionary["LASTHISTORYKEY"] 값을 받아오도록 바꾸면 중복키 오류가 해결될 것이다. dictionaryItem["LASTHISTORY"] 에는 Guid.NewGuid().ToString()으로 생성한 값이 재대로 들어가 있기 때문이다.