일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sql 기술면접
- 백준 16235
- JPA
- 백준
- with recursive
- 백준 17779
- Coroutine
- 백준 17626
- 백준 파이썬
- 프로그래머스
- spring security
- 백준 16719
- Kotlin
- Spring Boot
- MSA
- springboot
- 프로래머스
- 파이썬
- java 기술면접
- MySQL
- JVM
- re.split
- Spring
- 백준 19238
- 웹어플리케이션 서버
- spring cloud
- spring oauth
- 백준 16236
- 백준 15685
- java
- Today
- Total
목록파이썬 (92)
시작이 반
구현, 시뮬레이션 문제이다. 여기서 생각해 봐야할 것은 1. 어떻게 숫자를 세고 센 숫자를 적은 숫자 부터 넣을것인지 2. 행에 대해서의 계산은 쉽지만 열에 대한 계산을 어떻게 할것인지 이 2가지이다. 1번 이 문제는 사전을 사용하였다. 각 숫자에 대해 key로 사용하였으며 나온 횟수를 value로 사용하였다. 그 후에 value를 기준으로 큰것부터 정렬을 하였다. 사전을 정렬하면 [(key, vlaue)] 형식의 리스트가 나온다. 그 다음으로는 리스트의 값을 pop하면서 다시 새로운 2차원 리스트를 만들어줬다. 2번 이 문제는 일단 열을 보면서 반복을 하는데 새로운 2차원 리스트의 행에 넣어준다. 그 후에 만들어진 새로운 리스트의 x, y 값을 다시 새로운 리스트를 만들어 y, x 좌표에 넣어준다. r..
구현, 시뮬레이션 문제이다. 시간제한을 보면 파이썬은 1.3초안에 통과해야한다... 엄청 빡세다.. 사실 알고리즘은 필요로 하지 않는 문제이다. 하지만 시간초과로인해 고려해야 할 점이 많았다. 처음 접근한 방식은 나무에 대한 좌표와 나이를 묶어서 deque에 넣으면서 확인을 하였다. from collections import deque n, m, k = map(int, input().split(' ')) a = [list(map(int, input().split(' '))) for _ in range(n)] graph = [[5] * n for _ in range(n)] trees = deque() #나무들이 들어있는 deque dead_trees = list() for _ in range(m): x, ..
구현, 시뮬레이션 문제이다. 여기서 중요한것은 일단 x, y좌표가 바뀐것이고 이전 드래곤 커브에서 90도를 돌린 것을 어떻게 붙일것인지? 이것만 금방 생각한다면 쉽게 풀 수 있다. ( 근데 어떻게 생각하냐.... ㄷ) 우선 방향을 보면 0 : → 1 : ↑ 2 : ← 3 : ↓ 인 것을 확인할 수 있는데 → 에서 다음 붙일 것이 이전 드래곤 커브에서 90도 돌려서 끝점에 붙여야 하는것은 ↑ 이다. 즉 이전 드래곤 커브 선을 거꾸로 확인하면서 90도 돌리며 추가해주면 된다. 다음 2세대 드래곤 커브 만드는 것을 보자 이 다음 붙일 드래곤 커브는 이건데 이전 드래곤 커브를 거꾸로 한 선씩 확인하면서 90도 돌리면 된다. 방향을 확인해보자 보면 이전 커브에 +1된 방향이 추가된다. 그러면 필요한 것이 커브에 ..
bfs, 구현 문제이다. 여기서 고려할점은 더 이상 먹을 수 있는 물고기가 공간에 없다. 1. 상어보다 작은 물고기는 있지만 도달할 수 없다. 2. 상어보다 작은 물고기가 없다. 3. 모든 물고기를 먹어서 더이상 먹을 수 있는 물고기가 공간에 없다. 1. bfs를 돌렸을때 나온 거리가 INF이면 종료하였다. n_x, n_y, dist, idx = bfs(c_x, c_y, small_fish, size) if dist == math.inf: break 2. 상어보다 작은 물고기를 넣어논 list에 더이상 물고기가 없을 경우 종료하였다. if len(small_fish) == 0: # 끝 return time 3. 물고기를 넣어논 list에 더이상 물고기가 없을 경우 종료하였다. while fish: . ...
구현문제이다. 명령에 대해서 그대로 따라서 구현하면 금방 구현할 수 있을것이다. ( 난 엄청 오래걸렸다.. ) 1번 명령에서 중요한것이 파이어볼을 이동하는 것이다. 이동하는 좌표를 구하고 큐에 넣어서 마지막에 큐에서 빼면서 좌표에 대한 계산을 다 해줬다. 2번 명령은 만약에 계산된 좌표에 파이어볼이 2개 이상일때이다. 이때 중요한 것은 모두 홀수이거나 모두 짝수 일때 어떻게 계산하는 것이냐 이다. 처음에 생각한 방법은 모든 방향을 더했을때 짝수이면 모두 홀수 or 모두 짝수 라고 생각했다. ( 너무 안일했다..) 나중에 보니까 0, 1, 2, 3일때도 더하면 짝수가 나온다.. 그래서 다시 생각한 방법은 2개 부터 방향 %2 를 한뒤 더한값이 합쳐진 파이어볼의 개수랑 같거나 0일때로 수정하였다. ex) 0..
구현문제이다. 1초 동안 아래 적힌 일이 순서대로 일어난다. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향으로 확산된다. 인접한 방향에 공기청정기가 있거나, 칸이 없으면 그 방향으로는 확산이 일어나지 않는다. 확산되는 양은 Ar,c/5이고 소수점은 버린다. (r, c)에 남은 미세먼지의 양은 Ar,c - (Ar,c/5)×(확산된 방향의 개수) 이다. 공기청정기가 작동한다. 공기청정기에서는 바람이 나온다. 위쪽 공기청정기의 바람은 반시계방향으로 순환하고, 아래쪽 공기청정기의 바람은 시계방향으로 순환한다. 바람이 불면 미세먼지가 바람의 방향대로 모두 한 칸씩 이동한다. 공기청정기에서 부는 바람은 미세먼지가 없는 바람이고, 공기청정기로..
구현, BFS 문제이다. 처음에 문제를 이해했을 때 하루동안 2지역에서 인구이동이 일어났으면 2번 인구가 이동했을거라고 생각하고 풀었다. 이게아니라 하루에 여러곳에서 인구가 이동했다고 해도 한번으로 인구이동이 발생했다고 친다. 하루에 이렇게 주황구역, 파란구역에서 인구 이동이 일어났으면 2번 발생한게 아니라 한번으로 친다. -> 하루에 한번이라도 어떤 구역에서 인구이동이 발생하면 한번으로 친다. 0,0 에서부터 bfs를 돌리고 n,n까지 돌린뒤 인구 이동이 발생했는치 체크하고 발생했으면 다시 0,0부터 bfs를 돌린다. 이동이 발생하지 않으면 무한루프를 멈춘다. from collections import deque n, l, r = map(int, input().split(' ')) graph = [li..
구현문제이다.. stack을 사용하여 풀었다. stack에는 사전순으로 앞에 오는 문자의 인덱스를 넣으면서 인덱스tps://www.acmicpc.net/problem/16719 구현문제이다.. stack을 사용하여 풀었다. stack에는 사전순으로 앞에 오는 문자의 인덱스를 넣으면서 인덱스 계산을 해줬다. 이런식으로 풀었는데 너무 어렵게 푼거같다.. string = list(input()) index = list() visited = [False] * len(string) s = 0 e = len(string) while True: check = False if string[s:e]: min_str = min(string[s:e]) min_idx = string[s:e].index(min_str) + s..