일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DP
- Spring
- 코딩테스트
- inflearn
- Web
- Kotlin
- 순환
- SWEA
- 해슁
- 검색트리
- 다이나믹 프로그래밍
- SQL
- algorithm
- BFS
- 자바
- DFS
- android
- java
- 알고리즘
- 클린코드
- Color
- CSS
- codecademy
- html
- front-end
- 프로그래머스
- 구현
- 정렬
- CleanCode
- javascript
- Today
- Total
목록Algorithm (81)
깡뇽
N 고민) r, c, k = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(3)] def r_cal(arr): cnt = [[0] * 101 for _ in range(len(arr))] for i in range(len(arr)): for num in arr[i]: cnt[i][num] += 1 temp = [] for x in range(len(arr)): for y in range(101): if cnt[x][y] != 0: if temp == []: temp.append(y) temp.append(cnt[x][y]) if arr = if(len(arr) > 100): arr = arr[99:] retu..
NxM 크기의 사무실. K개의 CCTV (5종류 / 1번 CCTV는 한 쪽 방향만 감시, 2번과 3번은 두 방향을 감시할 수 있는데, 2번은 감시하는 방향이 서로 반대방향, 3번은 직각 방향, 4번은 세 방향, 5번은 네 방향) CCTV는 벽을 통과할 수 없으며, CCTV가 감시할 수 없는 영역은 사각지대. CCTV는 항상 90도 방향으로 회전할 수 있으며, 감시하려는 방향이 가로 또는 세로 방향임. - 입력 1줄 : 사무실의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 8) 2~N줄 : 사무실 각 칸의 정보 (0 : 빈칸, 6 : 벽, 1~5 : CCTV) *CCTV는 8개 이하 - 출력 사각 지대의 최소 크기 고민) dfs에서 재귀로 돌리면서 확인하는 걸텐데.. 해당 가로 또는 세로를 어떻게 ..
NxM 크기 지도 오른쪽 : 동쪽, 위쪽 : 북쪽 지도의 좌표 (r, c) : r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수 주사위는 지도 (x, y)위치에 놓여있으며, 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태. 가장 처음 주사위 모든 면에 0이 적혀져 있음. 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다. - 입력 1줄 : 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20) , 주사위를 놓을 곳의 좌표 x, y (0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1) , 명령의 개수 K (1 ≤ K..
NxM 크기 배열 A(각 행에 있는 모든 수의 합 중 최솟값). ex) 배열A == 4 (1행 합 == 6 / 2행 합 == 4 / 3행 합 == 15) 회전 연산 (r, c, s) -> 가장 왼쪽 윗 칸 == (r-s, c-s) / 가장 오른쪽 아랫 칸 == (r+s, c+s) 시계 방향 회전 (r, c) == r행 c열 ex) 배열A == 6x6 , 회전 연산 == (3, 4, 2) - 입력 1줄 : 배열 A의 크기 N, M, 회전 연산의 개수 K 2~N줄 : A[i][j] K줄 : r, c, s - 출력 배열 A의 값의 최솟값 17406번 배열 돌리기4 방법1) 배열돌리기1과 같이 list를 만든 후에 인덱스로 직접 접근 from itertools import permutations from cop..
NxM 크기 배열. R번 연산. 1번 : 상하 반전 2번 : 좌우 반점 3번 : 오른쪽으로 90 회전 4번 : 왼른쪽으로 90 회전 * 5 & 6번 연산 수행 시, N/2*M/2인 4개의 부분 배열로 나누어야 함. 5번 : 1->2 / 2->3 / 3->4 / 4->1 6번: 1->4 / 4->3 / 3->2 / 2->1 16935번 배열 돌리기3 n, m, r = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(n)] operation = list(map(int, input().split())) def cal1(): temp_board = [[0] * m for _ in range(n)] for i in ..
16926번 배열 돌리기1와 문제 동일. But, 조건 변경 - 제한 2 ≤ N, M ≤ 300 1 ≤ R ≤ 10^9 min(N, M) mod 2 = 0 1 ≤ Aij ≤ 10^8 => R의 최댓값이 더 커짐 16927번 배열 돌리기2 출처 : https://www.acmicpc.net/problem/16927 16927번: 배열 돌리기 2 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net
NxM 크기 배열 반시계 방향 돌리기 ex) 배열 2번 회전 - 입력 1줄 : N, M, R (R은 회전의 수) 2~N줄 : 배열 A의 원소 Aij - 출력 배열을 R번 회전시킨 결과 - 제한 2 ≤ N, M ≤ 300 1 ≤ R ≤ 1,000 min(N, M) mod 2 = 0 1 ≤ Aij ≤ 10^8 16926번 배열 돌리기1 n, m, r = map(int, input().split()) a = [] new_a = [[0]*m for i in range(n)] for _ in range(n): a.append(list(map(int, input().split()))) for i in range(n): for j in range(m): rest_i = (i+r) % n rest_j = (m+r) %..
(r, c) : r행 c열 공기청정기는 2행을 차지하며, 항상 1번 열에 설치. 공기청정기가 없는 칸 (r, c)에는 미세먼지가 Ar,c 만큼 존재. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향으로 확산된다. 인접한 방향에 공기청정기가 있거나, 칸이 없으면 그 방향으로는 확산이 일어나지 않는다. 확산되는 양은 Ar,c/5이고 소수점은 버린다. (r, c)에 남은 미세먼지의 양은 Ar,c - (Ar,c/5)×(확산된 방향의 개수) 이다. 공기청정기가 작동한다. 공기청정기에서는 바람이 나온다. 위쪽 공기청정기의 바람은 반시계방향으로 순환하고, 아래쪽 공기청정기의 바람은 시계방향으로 순환한다. 바람이 불면 미세먼지가 바람의 방향대로 ..
드래곤 커브 속성 : 1. 시작점 / 2. 시작 방향 / 3. 세대 0세대 드래콘 커브 : 1인 선분 1세대 드래곤 커브 : 90도 2세대 드래곤 커브 : ... K세대 드래곤 커즈 : K-1세대 드래곤 커브를 끝 점을 기준으로 90도 시계 방향 회전 시킨 다음, 그것을 끝 점에 붙인 것 100x100인 격자 위에 드래곤 커브 N개 존재. 크기가 1x1인 정사각형의 네 꼭짓점이 모두 드레곤 커브의 일부인 정사각형의 개수를 구하자. - 입력 1줄 : 드래곤 커브의 개수 N() 2~N줄 : 드래곤 커브의 정보(x&y : 드래곤 커브의 시작점 / d : 시작 방향 / g : 세대) * 방향 : 0: x좌표가 증가하는 방향 (→) / 1: y좌표가 감소하는 방향 (↑) / 2: x좌표가 감소하는 방향 (←) /..
NxN 크기의 도시(빈 칸, 치킨집, 집 중 하나) (r, c) : r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸 치킨 거리 == 집과 가장 가까운 치킨집 사이의 거리 도시의 치킨 거리 == 모든 집의 치킨 거리의 합 임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다. 0 == 빈 칸, 1 == 집, 2 == 치킨집 도시에서 가장 수익을 많이 낼 수 있는 치킨집의 개수는 최대 M개 도시의 치킨 거리가 가장 작게 될 때를 고려. - 입력 1줄 : N(2
비바라기 마법 -> NxN 격자에서 연습 격자의 칸에는 바구니가 하나 있고, 바구니는 칸 전체를 차지함. 바구니에 저장할 수 있는 물의 양에는 제한 없음. (r, c)는 격자의 r행 c열에 있는 바구니를 의미. A[r][c]는 (r, c)에 있는 바구니에 저장되어 있는 물의 양을 의미. 격자의 가장 왼쪽 윗 칸 (1, 1) 가장 오른쪽 아랫 칸 (N, N) 연습을 위해 1번 행과 N번 행을 연결. 1번 열과 N번열 연결. 즉, N번 행의 아래에는 1번 행이, 1번 행의 위에는 N번 행이 있고, 1번 열의 왼쪽에는 N번 열이, N번 열의 오른쪽에는 1번 열이 있음. 비바라기 시전 -> (N, 1), (N, 2), (N-1, 1), (N-1, 2)에 비구름 생성 구름 이동 M번 명령 -> i번째 이동 명령은..
길이가 N인 컨베이어 벨트 / 길이가 2N인 벨트가 해당 컨베이어 벨트를 위아래로 감싸며 도는 중. 길이 1 간격으로 2N개의 칸으로 나뉨. 각 칸은 1부터 2N까지의 번호가 매겨져 있음. 벨트가 한 칸 회전하면 1번부터 2N-1번까지의 칸은 다음 번호의 칸이 있는 위치로 이동하고, 2N번 칸은 1번 칸의 위치로 이동. i번 칸의 내구도는 Ai / 1번 칸이 있는 위치를 "올리는 위치" / N번 칸이 있는 위치를 "내리는 위치" 로봇을 올리는 위치에 올리거나 로봇이 어떤 칸으로 이동하면 그 칸의 내구도는 즉시 1만큼 감소. 1. 벨트가 칸 위에 있는 로봇과 함께 한 칸 회전. 2. 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면 이동. 만약 이동할 수 없다면 가만히 ..