일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리눅스
- Doubly Connected Edge List
- 문제풀이
- c#
- ubuntu
- dp
- uclidean algorithm
- 내적
- 수학
- 다이나믹 프로그래밍
- Expanding Polytope Algorithm
- Graham Scan
- C
- SOH
- 유니티
- 알고리즘
- 분할축 이론
- Vector
- 백준
- PS
- 보로노이다이어그램
- 우분투
- C++
- 충돌 알고리즘
- 벡터
- Unity
- linux
- 외적
- GJK
- AABB
- Today
- Total
목록전체 글 (62)
마이 플밍 블로그
https://www.acmicpc.net/status?user_id=dkak14&problem_id=14226&from_mine=1 채점 현황 www.acmicpc.net 코드 #include #include #include using namespace std; int S; int IMT[1003][1003]; int answer = 98765432; void CalIMT(int imtnum, int clipboard, int count) { if (answer S) return; if (IMT[imtnum][clipboard] S; memset(IMT, 5, sizeof(IMT)); CalIMT(1, 0, 0); cout
memset 함수는 메모리의 값을 원하는 범위만큼 값을 변경 시켜주는 함수다. 더보기 void* memset(void* ptr, int value, size_t num); 첫번째 ptr은 메모리의 시작 주소 두번째 value는 바꿀 값 세번째 num은 메모리 길이를 뜻한다. 이 길이는 바이트 단위로써 메모리 크기 한조각단위의 길이를 뜻한다. sizeof(타입) 으로 하면 된다. 함수가 제대로 작동하면 맨 처음인자인 ptr이 반환되고 실패하면 NULL을 반환한다. 예제 #include #include using namespace std; int main() { char arr[20]; cin >> arr; memset(arr, 'b', 3 * sizeof(char));; cout
https://www.acmicpc.net/problem/12869 12869번: 뮤탈리스크 1, 3, 2 순서대로 공격을 하면, 남은 체력은 (12-9, 10-1, 4-3) = (3, 9, 1)이다. 2, 1, 3 순서대로 공격을 하면, 남은 체력은 (0, 0, 0)이다. www.acmicpc.net 풀이 DP로 푸는 문제다. 모든 경우의 수를 탐색해서 제일 빨리 SCV를 다 처치하는 경우를 찾는다 코드 #include #include #include #include #include #include using namespace std; #define MAX 987432 int N; int SCVHP[4]; int SCV[61][61][61]; int n = 0; void Mutalisk(int scv1..
2281번: 데스노트 첫째 줄에 n(1 ≤ n ≤ 1,000), m(1 ≤ m ≤ 1,000)이 주어진다. m은 노트의 가로 칸의 개수(폭, 너비)이다. 다음 n개의 줄에는 각 사람의 이름의 길이가 노트에 적어야 할 순서대로 주어진다. 각 길이는 m www.acmicpc.net 풀이 DP를 이용해 푸는 문제다. 한줄 넘기고 이름을 쓰는 경우와 넘기지 않고 이어서 이름을 쓰는 경우 두가지로 나누어서 풀면된다. 코드 #include #include #include using namespace std; int m,n; int name[1001]; int dp[1001][1001] = {0}; int DeathNote(int nameIndex, int length) { if (nameIndex >= n) { r..
11559번: Puyo Puyo 총 12개의 줄에 필드의 정보가 주어지며, 각 줄에는 6개의 문자가 있다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다. www.acmicpc.net 풀이 딱히 어렵진 않았는데 문제 해석을 잘못해서 뿌요뿌요 플레이 영상보면서 고치느라 시간이 조금 걸렸다. 아래쪽부터 탐색을 시작해서 해당 주변에 같은 타일이 있다면 큐와 region 벡터에 담고 그 타일을 탐색한다. 더이상 주변에 같은 타일이 없을 경우 region 벡터의 사이즈가 4이상 이라면 region의 요소들을 초기화하고 해당 칸을 빈칸으로 한다. 만약 사이즈가 3 이하면은 그냥 초기화만 한다. 이런식으로 한번 모든 타일을 쭉 탐색..
14238번: 출근 기록 스타트링크에는 세명의 직원이 일을 하고 있다. 세 직원의 이름은 강호(A), 준규(B), 수빈(C) 이다. 이 회사의 직원은 특별한 룰을 가지고 있는데, 바로 하루에 한 명만 출근한다는 것이다. 3일간의 www.acmicpc.net 코드 #include #include #include #include #include using namespace std; int workerCount[3]; bool dp[51][51][51][3][3] = { false }; char ans[51]; bool DP(int a, int b, int c, int bbefore, int before) { if (workerCount[0] == a && workerCount[1] == b && worker..
https://www.acmicpc.net/problem/16930 16930번: 달리기 진영이는 다이어트를 위해 N×M 크기의 체육관을 달리려고 한다. 체육관은 1×1 크기의 칸으로 나누어져 있고, 칸은 빈 칸 또는 벽이다. x행 y열에 있는 칸은 (x, y)로 나타낸다. 매 초마다 진영이는 www.acmicpc.net 풀이 푸는데 좀 많이 애먹은 문제였다. 계속해서 96% 부분에서 시간초과가 나서 고민 했는데 결국 찾긴 찾았다. 이 문제는 BFS로 풀었다. 한 노드를 탐색하고 K 만큼 주변 노드들을 탐색한다. 해당 노드가 방문된 횟수가 현재 방문 횟수보다 크거나 같다면 탐색을 계속하고 작으면 다른 방향으로 탐색을 시작한다. 방문한 노드가 처음 방문한 노드라면 큐에 담고 아니라면 방문횟수를 업데이트하고..
https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N > N >> S; minLength = N + 1; for (int i = 0; i > key; num.pus..
12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net #include #include using namespace std; int N, K; int findCount = 0; int minFindTime = 1000000000; int flag[100001] = { 0 }; void FindTime(int index, int time) { queue q; q.push(make_pair(index, time)); while (q.size() > 0) { int pos = q.fro..
https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net #include #include #include #include #include using namespace std; int H, W; int Block[510]; int main() { scanf("%d", &H); scanf("%d", &W); for (int i = 0; i < W; i++) { scanf("%d", &Block[i]); } int totalRain = 0;..