/* code block */
반응형

 

최소 거리를 구하는 문제이기 때문에 BFS를 이용한다.

 

각 방을 노드로, 방과 방 사이를 이동하는데 부숴야하는 벽의 수를 노드 간 이동 비용이라고 했을 때,

 

벽이 없는 방(0)으로 이동하는데에는 비용이 0, 부숴야 하는 벽(1)으로 이동하는데에는 비용이 1 소모되는

 

0과 1의 비용을 가진 탐색이 된다.

 

비용이 0과 1로 나뉘어져있을때에는 deque를 사용해서 매 노드를 탐색할 때마다 갈 수 있는 노드에 대한 비용이 0이면 앞에, 1이면 뒤에 추가해주며 탐색을 이어나가면 된다. 

 

그렇게 하면 비용이 적은 경로부터 우선적으로 탐색하고, 가장 적은 비용에 대한 탐색이 끝나고 나서야 비로소 더 큰 비용의 경로를 탐색하기 시작하기 때문에 벽을 최소한으로 부수고 이동하는 경로를 찾을 수 있게 된다.

 

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
import sys
from collections import deque
 
n, m = map(int, sys.stdin.readline().split())
= []
 
for i in range(m):
    a.append(sys.stdin.readline())
 
dist = [[-1]*for _ in range(m)]
dist[0][0= 0
= deque()
dx = [1,-1,0,0]
dy = [0,0,1,-1]
q.append([00])
 
while q:
    x, y = q.popleft()
    for i in range(4):
        nx, ny = x+dx[i], y+dy[i]
        if nx>=0 and nx<and ny >=0 and ny<n:
            if dist[nx][ny] == -1:
                if a[nx][ny] == '0':
                    q.appendleft([nx, ny])
                    dist[nx][ny] = dist[x][y]
                elif a[nx][ny] == '1':
                    q.append([nx, ny])
                    dist[nx][ny] = dist[x][y]+1
 
print(dist[m-1][n-1])
반응형
반응형

목적지까지 최단거리(시간)를 구하는 문제이기 때문에 BFS를 이용한다.

 

리스트 d[s][c] 에는 화면에 이모티콘 s개, 클립보드에 이모티콘 c개가 있는 상황까지 도달하기 위한 최소 시간이다.

 

d[s][c]가 -1인 경우는 아직 방문하지 않은 경우이다.

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
import sys
from collections import deque
 
= int(sys.stdin.readline())
= [[-1]*1001 for _ in range(1001)]
d[1][0= 0  # 화면 1개, 클립보드 0개
= deque()
q.append((1,0))
 
while q:
    s, c = q.popleft()
 
    if d[s][s] == -1:
        d[s][s] = d[s][c] + 1
        q.append((s, s))
    if s+c<=and d[s+c][c] == -1:
        d[s+c][c] = d[s][c] + 1
        q.append((s+c,c))
    if s-1>=0 and d[s-1][c] == -1:
        d[s-1][c] = d[s][c] + 1
        q.append((s-1,c))
ans = -1
for i in range(n):
    if d[n][i] != -1:
        if ans == -1 or ans > d[n][i]:
            ans = d[n][i]
print(ans)
반응형
반응형

mysql을 .msi 실행파일로 설치하던 중 mysql sever 8.0.17의 설치만 실패하는 오류가 났다.

 

구글링 중 찾은 해결방법은 다음과 같다.

 

1. C:\ProgramData\MySQL\MySQL Installer for Windows\Product Cache\mysql-8.0.17-winx64.msi 
2. When the wizard pops, exclude "Server Data Files" (Red "X" on the drive) 
3. The wizard will install the server 
4. Open the regular MySQL Installer 
5. Click the "Reconfigure" link 
6. Finish server configuration.

반응형

'데이터베이스 > SQL' 카테고리의 다른 글

튜플의 특정 글자 수정하기  (0) 2019.09.30
반응형

표현식

 설명 

 ^

 문자열의 시작

 문자열의 종료

 .

 임의의 한 문자 (문자의 종류 가리지 않음)

 단, \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

 앞 문자가 하나 이상

 앞 문자가 없거나 하나있음

 []

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 {}

 횟수 또는 범위를 나타낸다.

 ()

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

출처: https://highcode.tistory.com/6 [HighCode]

 

 java.util.regex.Matcher 와 java.util.regex.Pattern을 함께 사용한다.



반응형

' > Java' 카테고리의 다른 글

자동으로 실행되는 WebListener 어노테이션  (0) 2019.10.24
모든 요청을 받는 서블릿  (0) 2019.10.24
jdbc에 mysql 연동시 time zone 에러  (0) 2019.10.11
서블릿 구현 - Hello world  (0) 2019.09.29
tomcat 서버 메인 함수  (0) 2019.09.29
반응형

 

한 가방에는 딱 하나의 보석만 담을 수 있기 때문에 최대한 비싼 보석을 하나라도 더 챙기는것이 중요하다.

 

비싼 보석인데 무겁다고 해서 더 싸고 가벼운 보석에게 가방을 양보하면 그 가방에 다른 보석을 더 담을 수 있는것도 아니기 때문에 양보한 의미가 없기 때문이다. 비싼 보석이 무겁더라도 담을만한 가방이 있다면 우선 담아야 한다.

 

포인트는 최대한 비싼 보석부터 최대한 작은 가방에 담는 것이다.

 

이 문제는 우선순위 큐를 이용해야 한다.

 

우선순위 큐에는 가방의 최대 크기를 넘기지 않는 무게의 모든 보석을 가격을 우선순위로 담은 후에

 

가방의 수만큼 꺼내면 된다.

 

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
import sys
from queue import PriorityQueue
 
n, k = map(int, sys.stdin.readline().split())
 
jew = []
bag = []
for i in range(n):
    jew.append(list(map(int, sys.stdin.readline().split())))
for i in range(k):
    bag.append(int(sys.stdin.readline()))
jew.sort(key = lambda item: item[1], reverse = True) 
for i in range(n):
    jew[i].insert(0, i) 
 
jew.sort(key = lambda item: item[1])  
bag.sort() 
= PriorityQueue()
 
idx = 0
sum = 0
for i in range(k):  
    while (idx < n and bag[i] >= jew[idx][1]):  
        q.put((jew[idx][0], jew[idx][2]))
 
        idx += 1
    if not q.empty():
       sum += q.get()[1]
print(sum)
 
 
반응형
반응형

우선순위 큐는 넣는 순서와 상관 없이, 가장 높은 우선순위를 가진 데이터를 꺼내는 큐이다.

 

아래와 같이 사용한다.


1
2
3
4
5
6
7
8
from queue import PriorityQueue
 
= PriorityQueue()
q.put(3)
q.put(1)
q.put(2)
print(q.get())
 
 

위 코드의 결과는 1이다. 파이썬의 우선순위 큐는 기본적으로 min heap으로 되어있기 때문에

 

숫자가 낮은 수가 높은 우선순위를 가진다.

 

직접 우선순위를 정해줄 수도 있다.

 

1
2
3
4
5
6
7
from queue import PriorityQueue
 
= PriorityQueue()
q.put((3'바나나'))
q.put((1'딸기'))
q.put((2'토마토')
print(q.get()[1])

위 코드의 결과는 딸기이다.

반응형

'Python > 기초' 카테고리의 다른 글

스택 구현하기  (0) 2019.08.21
소수 구하기 - 에라토스테네스의 체  (0) 2019.08.21
최대공약수, 최소공배수 구하기  (0) 2019.08.21

+ Recent posts