일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lis
- BeautifulSoup
- 링크드리스트
- 우선순위 큐
- 백트래킹
- 분할 정복
- 스택
- 세그먼트 트리
- 크루스칼
- 비트마스크
- 큐
- 순열
- SSAFY
- 피보나치 수
- DP
- dfs
- 클래스
- 문자열
- MST
- 이분 탐색
- 완전 탐색
- 재귀
- 중복 순열
- 그리디
- 시뮬레이션
- Knapsack
- 조합
- 메모리풀
- BFS
- 빠른 입출력
- Today
- Total
목록SWEA (9)
작심 24/7
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com DP 너무 어려워.. #include #include #include #include using namespace std; int T, N, M; int arr[3002], brr[102]; int dp[3002][102][102][2]; // a, b 고른 수, b 버린 수, 가져가거나 안 가져가거나 int play(int a, int i, int j, int picked){ if (dp[a][i][j][picked] != -1) return dp[a][i][j][picked]; int val1 = 0, val2 = 0, val3 = 0, val4 = 0; if..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 링크드 리스트를 직접 구현하여 풀었다. 메모리 풀을 이용하여 메모리를 아껴준다. #include using namespace std; struct Node { int data; Node *next; }; Node memPool[10000]; // 사용할 노드 미리 정의 (메모리 풀) Node *head; // 링크드 리스트의 대가리 int N, M, num, memPoolCnt, x, y, s; char order; Node *getNode(int num) { memPool[memPoolCnt].data = num; memPool[memPoolCnt].next =..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 0~9까지의 숫자가 모두 있는 경우는 chk = 1111111111 로 표시된다. OR 연산자를 이용하여 chk에 표시돼있는지 확인할 숫자를 확인한다. #include using namespace std; int T, N; int main() { cin >> T; for (int t = 1; t > N; int cnt = 0, chk = 0, num = N; while (++cnt) { num = N * cnt; while (num) { // 각 자릿수 하나씩 돌기 chk |= 1
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. findTop 0열부터 W - 1열까지 돌면서 0행부터 탐색하며 맨 위에 있는 벽돌을 찾아내는 함수이다. 이 행위를 재귀로 N번 반복하면 N개 중 N개를 중복 포함에서 뽑는 중복 순열이 된다. 맨 위에 있는 벽돌을 찾아내면 거기에 구슬을 떨어뜨리고 다음 동작들을 (연쇄 벽돌 없애기, 벽돌 재 정렬하기) 실행한 뒤 돌아와서 재귀로 구슬을 떨어뜨릴 다음 위치를 찾는다. 2. findChain 구슬을 떨어뜨린 벽돌을 기준으로 연쇄된 모든 벽돌을 찾아 0으로 바꿔주는 함수이다. 상하좌우를 DFS 탐색하며 명중된 벽돌들을 찾아서 큐에 넣어준 뒤 0으로 바꿔주고 다음 ..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 기본적인 Union-Find 문제이다. 좀 더 효율적인 비교를 위해 union 연산에서 트리의 깊이(rank)를 이용하여 rank가 더 높은 집합에 rank가 낮은 집합을 붙이게 하였다. rank가 같을 때는 어쩔 수 없이 둘 중 하나는 증가돼야 하므로 + 1 해주었다. rank가 다를 때 rank가 동일할 때 import java.util.Scanner; public class D4_7465_창용마을_무리의개수 { static int T, N, M, res; static int parentOf[], rank[]; static int find(int a) { if..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 기본적인 로직은 상, 하, 좌, 우를 탐색하여 이전 봉우리보다 낮은 경우 → 한 칸 더 갈 수 있다. 이전 봉우리보다 높거나 같은 경우 → 현재 봉우리의 높이를 1~K 만큼 깎아서 (이전 봉우리 높이 - 1) 로 만들 수 있는지 판단. →만들 수 있으면 한 칸 더 갈 수 있다. 이때, 깎을 수 있는 기회는 한 번뿐이므로 깎았다고 표시를 해줘야 한다. 이렇게 가장 긴 길이를 찾는 문제이므로 DFS로 풀면 되지만 굳이 굳이 BFS로 접근해서 방문 체크 때문에 머리 아팠다. DFS는 깊이 우선 탐색이기 때문에 방문 배열 한 개 가지고 재귀 호출을 통해 체크했다가 지웠다..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 일단 Core 중에서도 가장자리에 있는 것들은 전선을 연결하지 않기 때문에 고려해줄 이유가 없으므로 코어의 목록에서 제외하고 시작한다. 최대한 많은 Core에 전원을 연결해야 하기 때문에 코어의 개수를 M개라 칭하면, M개 중 M개를 뽑는 조합부터 시작하여 M - 1, M - 2, ... , 0개를 뽑는 경우까지 차근차근 생각해주어야 한다. M개 중 R개를 뽑는 조합을 구하면, 즉 R개의 Core를 사용할 때, 전선 길이의 합이 최소가 되는 경우를 구해야 한다. DFS를 사용하여 상, 하, 좌, 우 방향으로 전선을 만들 수 있는지 판단한다. → 만들 수 있는 경우..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 예시 그림을 보면 괄호 문자가 세 가지 유형으로 나뉘는데 이에 따른 규칙을 찾아서 풀어주면 된다. ( 1. 새로운 막대기 추가 cnt++(막대기 개수 증가시킴) ) 2. 막대기 끝 cnt-- (막대기 개수 감소시킴) res++ (자르고 남은 조각 한 개 증가시킴) () 3. 막대기 자르기 res += cnt (자를 수 있는 막대기 개수만큼 증가시킴) import java.util.Scanner; public class D4_5432_쇠막대기_자르기 { public static void main(String[] args) { Scanner sc = new Scann..