위와 같이 특정 모델에 위 속성을 추가한 후

main 메소드가 있는 곳에 @EnableJPaAuditing 어노테이션을 추가해주면 행을 추가할 때마다 @CreatedDate 이 있는 속성 의 값이 자동으로 들어가고 @LastModifiedDate 어노테이션이 있는 속성에는 update시점의 시간을 자동으로 기록하게 된다.

'스프링' 카테고리의 다른 글

Spring 웹 계층  (0) 2021.12.14
스프링 서버 단에서 데이터 처리하는 방식  (0) 2021.11.27
h2 console  (0) 2021.11.27
form과 button  (0) 2021.11.21
스프링 프로젝트 base Url 설정  (1) 2021.11.12

h2의 경로를 콘솔로 확인하기 위해서 강의에서 처럼 아래와 같이 해보았지만 되지않았다.

강의에서는 파일 이름이 application.yml 이였지만 최근에는 application.properties로 바뀌면서 뭔가 바뀐 듯 하다. 

그래서 인터넷 검색을 통해 알게 되었는데 application.properties에서 아래와 같이 해보았다.

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

다행이 아래와 같이 경로를 확인 후 강의를 계속 들을 수 있었다.

 

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

해당 문제는 간단해 보였지만 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문 하라는 조건 때문에 응근히 까다롭게 느껴졌다.

 

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를 사용하는거 보다 성능상 유리한 면이 있어서인 것 같다.

 

 

'알고리즘' 카테고리의 다른 글

BFS 1325번 효율적인 해킹  (0) 2021.12.01
백준 1012번 유기농 배추  (0) 2021.11.30
[JAVA]ArrayList 사용법  (0) 2021.11.23
1495번 기타리스트 백준  (0) 2021.11.21
병합정렬 & pypy3  (0) 2021.11.06
import java.util.ArrayList;

생성

ArrayList<Integer> arrayList1 = new ArrayList<Integer>();

추가

arrayList1.add(3);

삭제

arrayList1.remove(0);

 

'알고리즘' 카테고리의 다른 글

백준 1012번 유기농 배추  (0) 2021.11.30
기본 DFS와 BFS  (0) 2021.11.24
1495번 기타리스트 백준  (0) 2021.11.21
병합정렬 & pypy3  (0) 2021.11.06
동적계획법 (DP: Dynamic Programming) Python  (0) 2021.11.04

쿼리문중 문제가 되는 지점

AND T3.INSPECTIONTIME = '2021-11-09 오전 7:33:13'

 

아무래도 점검일자에 한글이 포함되어있어서 CONVERT 메소드 실행시 오류가 반환되는 것 같다.

그래서 아래와 같이 점검 일자를 YYYY-MM-DD 형태로 변환하여 해결하였다.

인텔리제이에 스프링 웹 프로젝트를 실행해보려 하니 아래와 같은 오류가 발생하였다. 

 

프로젝트의 jdk 버전은 1.8인데 

build.gradle의 버전은 11이다

따라서 맞춰 주도록 한다.

 

File > Project Structure

File > Settings

Gradle에서 Gradle JVM 버전을 11로 맞춘다.

다음 Compiler > Java Compiler에서 Target bytecode version을 맞춰준다.

 

성공적으로 빌드가 되었다.

<form method="post" action="/board/post">
	<button type="submit" name="register">등록</button>
</form>

코드를 짜면서 위와같이 form 안에 button 을 생성하여 사용해보았다.

재밌는 점은 버튼을 클릭하게 되면 button 의 name이 파라미터로 적용되서 url이

/board/post?register 와 같이 된다는 것이다.

'스프링' 카테고리의 다른 글

Auditing @CreatedDate @LastModifiedDate  (0) 2021.11.27
h2 console  (0) 2021.11.27
스프링 프로젝트 base Url 설정  (1) 2021.11.12
스프링 프로젝트 기본 설정하기  (0) 2021.11.12
이클립스 패키지 프리젠테이션  (0) 2021.11.10

https://www.acmicpc.net/problem/1495

 

1495번: 기타리스트

첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다.

www.acmicpc.net

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)

해서 아래 방식으로 해결하였다 약간 계수 정렬을 사용한 느낌의 코드이다.

'알고리즘' 카테고리의 다른 글

기본 DFS와 BFS  (0) 2021.11.24
[JAVA]ArrayList 사용법  (0) 2021.11.23
병합정렬 & pypy3  (0) 2021.11.06
동적계획법 (DP: Dynamic Programming) Python  (0) 2021.11.04
계수 정렬(Counting Sort) 알고리즘  (0) 2021.11.04

위 이미지의 내용은 

errorCode : FAIL

errorMapperId: saveLotStartingRegist

errorMessage: PRIMARY KEY 제약 조건 'WM_INSPECTIONRESULTHISTORY_PK'을(를) 위반했습니다. 개체 'dbo.WM_INSPECTIONRESULTHISTORY'에 중복 키를 삽입할 수 없습니다. 중복 값은 ~~ 입니다.

확인해보니 

 

히스토리 테이블에 값을 넣을 때는 모든 경우에 새로운 키를 발생시켜 값을 할당하고 있다

다른 곳에 문제가 있어 보인다.

HISTORYKEY 에 currentEntity1.LASTHISTORYKEY 값을 받도록 되어있는데 이부분을 그냥dictionary["LASTHISTORYKEY"] 값을 받아오도록 바꾸면 중복키 오류가 해결될 것이다. dictionaryItem["LASTHISTORY"] 에는 Guid.NewGuid().ToString()으로 생성한 값이 재대로 들어가 있기 때문이다.

리소스를 사용할 프로젝트를 우클릭 후 속성을 클릭한다.

리소스 추가하면 Properties > Resources.resx 파일이 생성된 것을 확인할 수 있다.

리소스파일을 추가 하기위해서 리소스 추가 버튼을 클릭하여 원하는 리소스를 추가하자

+ Recent posts