일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- inflearn
- front-end
- Spring
- codecademy
- algorithm
- 구현
- 정렬
- 코딩테스트
- DFS
- 알고리즘
- java
- 순환
- Kotlin
- html
- Color
- DP
- CSS
- Web
- javascript
- android
- 해슁
- 클린코드
- SQL
- SWEA
- BFS
- 다이나믹 프로그래밍
- 자바
- CleanCode
- 검색트리
- 프로그래머스
- Today
- Total
목록분류 전체보기 (183)
깡뇽
Q. 주사위 게임을 했을 때, 나올 수 있는 모든 경우의 수를 구해보자. - 입력 : 주사위의 개수 → 정수 1개 - 출력 : 해당 주사위로 나올 수 있는 주사위 눈의 모든 경우 주사위 N개가 있다면, N개의 주사위에서 각 주사위 눈을 선택 ex. N = 3이면, 1번 주사위 -> 2번 주사위 -> 3번 주사위 순으로 작동 즉, 현재(now)에 a를 넣으면 다음(next)에서는 a+1을 넣음. 1부터 6 중에서 하나를 뽑고 다음 주사위로 넘어감. int path[10]; void func(int a){ //지금 a번째 주사위를 뽑을 차례 // 0~N-1번 : 정상 // N번 주사위~ : 존재하지 않는 주사위 // N번의 주사위까지 도달 -> 0~N-1번 주사위에서 모두 눈을 선택 완료. if(a>=N){..
함수 지역변수 : 함수 안에서 선언한 변수 전역변수 : 어디에서나 같은 변수 (공통 사용) + 함수의 파라미터(변수가 가지고 있는 값을 준 것)도 지역변수로 취급. 재귀함수 함수가 자기 자신을 호출하여 문제를 해결하는 방법 DFS, Union Find, 분할정복, DP(Top-Down)에서 활용. void func1(){ func1(); } int main(){ func1(); return 0; } 이때, 너무 많이 쌓이면서 Stack Overflow(메모리 부족) 발생. 특정 함수에서 멈추라고 해줘야 함. 작동을 멈출 함수를 정해야하고, 반복되는 함수들이 같은 함수이더라도 구분할 수 있어야 함. ⇒ 변수 활용 (매개변수 or 전역변수 활용 가능 / 매개변수 주로 사용) → void func1(int a..
Q. 만약 aabbccabcbc 가 주어졌을 때, 각 문자가 몇 개 존재하는지 알 수 있을까? - 목표 : '문자' → 해당 문자의 개수 찾기 ⇒ DAT 활용 DAT DAT : Direct Access Table 배열의 index에 의미를 부여함. int DAT[]; 로 정의한 배열에서 index는 문자, value는 해당 문자 개수를 나타냄. WHEN : 기록 할 때 1) 카운팅 2) 존재 확인 WHERE : 배열의 삽입과 추출 . . . n 차원에서 방향을 가지고 사용할 때 BAD : 정수 외의 값(char까지는 가능)은 index로 사용 불가능 너무 큰 범위 사용 불가능 int main(){ char temp[100]; cin >> temp; int DAT[256] = {0, }; //기본적인 문자..
17142번 연구소3 출처 : https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net
폴리오미노 : 1x1 크기 정사각형 여러 개 이어 붙인 도형 - 정사각형은 서로 겹치면 안 됨. - 도형은 모두 연결되어야 함. - 정사각형의 변끼리 연결되어 있어야 함. (꼭짓점끼리만 맞닿아 있으면 안 됨.) 4개를 이어 붙이면 "테트로미노" -> 5가지 NxM 크기 종이 위에 테트로미노 하나 놓을 때, 종이 1x1 크기의 칸 하나에는 정수가 쓰여져 있음. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성해라. 테트로미노는 반드시 한 정사각형이 한 칸을 포함하도록 놓고, 회전이나 대칭 가능. - 입력 1줄 : 종이의 세로 크기 N, 가로 크기 M 2~N줄 : 종이에 쓰여 있는 수. ( i번째 줄의 j번째 수) - 출력 테트로미노가 놓인 칸에 쓰인..
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) %..