일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 유니크제약조건
- execute
- 일대다
- PS
- dfs
- eager
- 스프링 폼
- exclusive lock
- 힙
- 이진탐색
- BOJ
- 다대일
- 스토어드 프로시저
- 비관적락
- JPQL
- shared lock
- SQL프로그래밍
- 다대다
- 연결리스트
- 백트래킹
- 동적sql
- FetchType
- fetch
- 지연로딩
- querydsl
- CHECK OPTION
- 낙관적락
- 즉시로딩
- 연관관계
- 데코레이터
- Today
- Total
목록All (557)
흰 스타렉스에서 내가 내리지
가능한 모든 경우의 수를 검사해야 하는 brute force 방식. 정육면체의 전개도는 회전과 뒤집는 경우를 제외하고 총 11가지가 가능하다. 각각의 경우를 배열에 담고, 90도 회전하는 함수, 좌우반전함수, 상하반전 함수를 구현해 놓으면 된다. 그리고 특정 패턴이 2차원 배열 내에 존재하는지 확인하는데 쓰인 테크닉은, tmp 라는 6x6배열이 있으면, tmp를 가운데 놓는, 즉 같은 사이즈의 배열을 3x3형태로 배치한 18x18 크기의 arr을 만듦 그리고 4중 for문을 통해 패턴을 검사한다. cubic = [] cubic.append([ [1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0], [1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0..
외판원 문제 (Traveling Salesman Problem, TSP) TSP문제는 해밀토니안 사이클을 이용해 다음과 같이 정의된다. 가중치 그래프 G = (V, E)가 주어졌다. G에서 모든 가능한 해밀토니안 사이클 중에서 경로의 합이 최소인 사이크르이 경로의 합을 구하라. 완전 탐색을 이용하면 항상 확실한 해를 구할 수 있다. 임의의 한 점을 출발점으로 잡고 아직 가보지 않은 모든 이웃 정점으로 계속 이동하면서 검사하면 된다. 그래프가 N개의 정점을 갖는 완전그래프라면 모든 해밀토니안 사이클은 (N-1)! 개가 된다. 임의의 도시를 출발점으로 잡는다. 이 도시를 시작으로 하여 (N-1)!가지의 순열 객체를 생성한다. 모든 순열 객체에서 경로의 합을 구하고, 경로의 합이 최소인 순열 객체와 경로 합을..
2차원 배열로 받아서, 가로, 세로로 순서대로 읽어나가면서 앞칸이 자기보다 낮으면, 그 차이만큼 답을 더해주면 된다. 근데 그동안 이런문제가 나오면, 나는 가로방향 for문 따로, 세로방향 for문 따로 문제를 풀어나갔다. 뭔가 머릿속으로는 비효율적이라는 생각은 했는데, 나은 방법이 떠오르지 않아서 그냥 이렇게 풀고 있었다. import sys input = sys.stdin.readline n, m = map(int, input().split()) board = [[0]*(m+2)] for _ in range(n): board.append([0] + list(map(int, input().split())) + [0]) board.append([0]*(m+2)) ans = 0 # 가로방향 for i in..
print 'nothing' in conole 이 버튼을 누르면, 콘솔에 nothing이 찍히게 하고 싶다. 만약 js파일에 코드가 이렇게 짜여져 있다면, class Nothing { constructor() { this.nothing = document.querySelector("button"); this.nothing.addEventListener("click", this.callPrintNothing);// this.callPrintNothing());// ***수정*** } printNothing() { console.log("nothing"); } callPrintNothing() { this.printNothing(); } } const nothing = new Nothing(); 콜백으로 전..
resultado 초록색박스 (div) 의 width와 height를 100% 로 하니, 부모박스 (검정, section)의 사이즈와 똑같아져서, span에 밀려 부모 박스를 나가버린다. * { box-sizing: border-box; } section { width: 500px; height: 500px; border: 3px solid black; display: flex; flex-direction: column; } 부모박스(section)를 플레스박스로 변경하고, direction을 column으로 하면 박스가 안에 가둬진다.
arr = [2, 2, 5] print( max(set(arr), key = arr.count)) # expected output: 2 key 속성값으로 함수인 arr.count를 주면, set(arr) 은 {2, 5}인데, 2와 5를 차례대로 arr.count의 인자로 넣어, 가장 큰 값이 나온 원소를 리턴한다. arr.count(2) 는 2이고, arr.count(5)는 1이니까, 원소 2를 리턴하는 것
수를 하나 제외했을 경우, 제외하지 않았을 경우의 dp배열을 두개 만들고, 두 배열 중 가장 큰 값을 고르면 된다. import sys input = sys.stdin.readline n = int(input()) arr = list(map(int, input().rstrip().split())) dp = [a for a in arr] # 하나도 빼지 않았을 경우 dp2 = [a for a in arr] # 하나를 뺸 경우 for i in range(1, n): dp[i] = max(dp[i], dp[i-1]+arr[i]) dp2[i] = dp[i] if i-2 >= 0 and dp[i] < dp[i-2] + arr[i]: # arr[i-1]을 제외한 경우가 합이 더 크게 나오는 경우 dp2[i] = d..
i를 1씩 늘려가면서, 자신보다 왼쪽에 있으면서 작은 수들만 골라 다 더하고, 만들어진 dp배열에서 가장 큰 값을 구하면 된다 import sys input = sys.stdin.readline n = int(input()) arr = list(map(int, input().rstrip().split())) dp = [a for a in arr] for i in range(n): for j in range(i): if arr[j] < arr[i]: dp[i] = max(dp[i], dp[j]+arr[i]) print(max(dp)) https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가..
흔한 미로에서 BFS를 이용하여 해결하는 문제다. 특이한 점은, 목적지까지의 최소경로 이런게 아니라, 벽을 최소 몇개 부숴야 하는가 였다. 즉, 1을 최소한으로 지나갈 수 있는 경우를 구하는 것이다. 우리는 지나간 경로를 세는게 아니라, 지금까지 만난 1의 개수를 세서 저장하면 되는 것이다. ans라는 미로와 크기가 같은 2차원 배열을 만들고, 1을 더 지나서 온 경로는 무시하고, 더 작은 경로만 카운트한걸 저장하면 된다. 그렇게 해서 정답은 ans[n-1][m-1]이 되는 것. from collections import deque import sys input = sys.stdin.readline m, n = map(int, input().split()) board = [list(map(int, lis..
다이나믹 프로그래밍 문제는 볼때마다 새롭다 3개의 요소를 연속으로 선택하면 안된다. 즉, i번째 요소는 연속으로 3번째인 요소가 되면 안된다. i번째 요소가 0번째, 1번째, 2번째 일 때를 나누어서 다이나믹 프로그래밍을 하면 된다. i번째 요소가 0번째 일경우 그 요소는 선택하지 않는다는 뜻이므로 dp[i-1]과 같음 1번째일경우 직전 요소는 선택하지 않았다는 뜻이므로 dp[i-2]+arr[i] 2번째일경우 직전요소를 선택하고, 그 이전의 요소는 선택하지 않았으므로 dp[i-3] + arr[i-1] + arr[i] import sys input = sys.stdin.readline def solve(): n = int(input()) arr = [0] + [int(input()) for _ in ran..