일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Team Fortress 2
- 브루트포스
- 자료구조
- 그리디 알고리즘
- 문자열
- 다이나믹 프로그래밍
- 정렬
- 그래프
- 재귀
- Unreal Engine 5
- 스택
- 다익스트라
- 수학
- 우선순위 큐
- c++
- 유니티
- VR
- BFS
- 백트래킹
- 유니온 파인드
- 투 포인터
- 구현
- ue5
- 트리
- 백준
- 시뮬레이션
- DFS
- 누적 합
- XR Interaction Toolkit
- 알고리즘
- Today
- Total
목록c++ (497)
1일1알

1. 백트래킹을 이용하여 7명의 학생을 모은 그룹을 모두 탐색한다. 2. 7명이 전부 붙어있는지 bfs를 이용해 확인한다. 3. 7명이 전부 붙어있다면 이다솜파의 학생이 4명 이상인지 확인해서 맞다면 ans를 1 증가시킨다. tip : n번째 학생이라면 n/5, n%5를 통해 행과 열을 알아낼 수 있다. (n은 0부터 시작) 예를 들어 7번째 학생이라면 7/5 , 7%5 이므로 학생의 위치는 (1, 2) 라는 것을 알 수 있다. #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ..

우선 백트래킹을 이용하여 나열 가능한 모든 경우의 수를 탐색하였다. 탐색을 마칠 때, 숫자를 담는 벡터와 연산자를 담는 벡터 두 개를 새로 만들었다. 숫자를 담는 벡터에는 이어붙일 수 있는 숫자들을 넣고, ( 1+2 3 이면 1, 23 이 들어감) 연산자를 넣는 벡터에는 +와 - 연산자만 넣었다. 그러면 예를들어 1+2 3-4 5 인 경우에는 숫자를 담는 벡터에는 1, 23, 45가 들어가고 연산자를 담는 벡터에는 +, - 이 들어간다. 새로 만든 두 벡터를 이용해 값을 계산해서 0이 되는 경우만 출력하도록 하였다. #include #include #include #include #include #include #include #include #include #include #include #includ..

패턴은 * 한개와 알파벳들로 이루어져 있고, * 은 문자열의 시작과 끝에 있지 않기 때문에 무조건 ~~~*~~~ 이런 형태로 이루어져 있다는것을 알 수 있다. 그렇기 때문에 파일과 패턴을 맨 앞부터 * 전까지 비교하고, 맨 뒤부터 * 뒤까지 비교해서 하나라도 다르면 일치하지 않는다. 그리고 고려해야될게 하나 더 있는데, 만약 패턴이 abc*abdef 이고, 파일이 abcdef 라면 위의 비교에서는 전부 같지만, 일치하지는 않는 파일이다. 그렇기 때문에 패턴의 길이 - 1 (*이 있어서 1을 빼줌) 는 파일의 길이보다 작거나 같아야 한다. #include #include #include #include #include #include #include #include #include #include #inc..

각 사람이 3장의 카드를 뽑는 경우의 합을 백트래킹을 통하여 모두 구하고, %10 연산을 통해 일의 자리만 비교하였다. #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int n; vector v(1001, vector(5)); int ans = -1; int maxV = -1; void BT(int num, int idx, int cnt, int sum) { if (cnt >= 3) { int res = sum % 10; if (res >= maxV) { maxV = ..

은근히 고려해야 할게 많은 쉽지는 않은 구현 문제이다. 각각의 cctv마다 감시할 수 있는 경우의 수가 다르다. 예를 들면, 1번 cctv는 상, 하, 좌, 우 4가지 경우를 감시할 수 있고, 2번 cctv는 상하, 좌우 2가지 경우를 감시할 수 있다. 이 경우들을 비트로 만들어서 저장하였다. 위, 오른쪽, 아래, 왼쪽 순서로 저장했고 감시할 수 있으면 1, 못하면 0으로 저장했다. 2번 cctv의 경우는 상하, 좌우 2가지 경우가 있기 때문에 1010, 0101 두 개를 저장했다. 다음은 백트래킹을 이용하여 모든 경우를 탐색했는데, 중간에 마스크를 이용해서 감시할 수 있는 지역을 알아냈다. 마스크는 1000부터 시작하여 오른쪽으로 한 칸씩 옮겨가는데, 각 경우마다 cctv와 &연산을 해서 0이 아니라면..

톱니바퀴의 각 정보를 벡터로 저장하고, 왼쪽으로 회전한다면 첫번째 원소를 erase하고 맨 뒤에 다시 넣고, 오른쪽으로 회전한다면 마지막 원소를 pop하고 insert하는 방식으로 작동하는 Rotate 함수를 만들었다. 그리고 Solve 함수에서 맞닿아있는 극이 다르다면 재귀적으로 함수를 실행하도록 하였다. rotDir을 회전 방향, dir을 진행 방향으로 설정하여 왼쪽으로 진행하는 것과 오른쪽으로 진행하는 것을 따로 시뮬레이션 하였다. 그리고 한쪽으로 진행했다면 처음 돌린 톱니바퀴는 돌아가있는 상태이기 때문에 반대쪽으로 한번 회전시킨 뒤 다른쪽으로 진행하였다. #include #include #include #include #include #include #include #include #include..