728x90
반응형

분류 전체보기 221

[C++] lower_bound, upper_bound (이진탐색)/ 예제

헤더파일 #include lower_bound 찾으려는 value 값보다 같거나 큰 숫자가 배열에서 처음 등장하는 위치 리턴 사용 조건 : 탐색을 진행할 배열 또는 벡터가 오름차순 정렬되어 있어야 함 사용법 lower_bound(arr, arr+n, value); // 배열 lower_bound(v.begin(), v.end(), value); // 벡터 lower_bound 의 반환형은 iterator이기 때문에 인덱스를 알고싶은 경우 lower_bound(arr, arr+n, value) - arr; // 배열 lower_bound(v.begin(), v.end(), value) - v.begin(); // 벡터 이렇게 사용하면 된다 upper_bound 찾으려는 value 값을 초과하는 숫자가 배열..

알고리즘/C++ 2023.01.01

[이코테/이진탐색/C++] 파라메트릭 서치/ 떡볶이 떡 만들기

파라메트릭 서치(Parametric Search) : 최적화 문제를 결정문제(예/아니오)로 바꾸어 해결하는 기법 #include using namespace std; int n, m; vector arr; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i=0; i> x; arr.push_back(x); } // 이진 탐색을 위한 시작점과 끝점 설정 int start = 0; int end = 1e9; // 이진 탐색 수행(반복적) int result = 0; while(start

알고리즘 2023.01.01

[이코테/이진탐색/C++] 이진 탐색 알고리즘 (설명/시간복잡도/예시)

이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 시간 복잡도 : O(logN) binarySearch 함수에서 vector 함수를 가져오는 경우 꼭 & 를 써준다 #include using namespace std; int n, target; vector arr; int binarySearch(vector& arr, int target, int start, int end){ while(start target) end = mid - 1; // 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인 else start = mid + 1; } } int main(void) { ios::sync_with_stdio(0); cin.tie(0); // 원소의 개수(n)과 ..

알고리즘 2023.01.01

[백준/BFS/C++] 11725번 트리의 부모 찾기

https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 처음에는 예제 보고도 문제가 이해안됐는데 이런 뜻이었다 bfs를 이용해서 풀었고 처음에는 출력하는 부분에서 endl 을 썼는데 시간초과가 떴다 그래서 "\n"으로 바꿨더니 통과했다 #include using namespace std; int n; vector graph[100001]; int parent[100001]; void bfs(int n){ queue q; q.push(n); while(!q.empty()){ int x = q.front(); q.po..

알고리즘 2022.12.31

[백준/DP/C++] 1699번 제곱수의합

https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 처음에는 n보다 작은 제곱수 중 가장 큰 제곱수부터 차례로 빼는 방법을 사용했는데 그러면 43같은 반례가 나왔다 ex) 43 = 6² + 2² + 1² + 1² + 1² (5개) 43 = 5² + 3² + 3² (3개) 그래서 dp[n]은제곱수 항의 최소개수로 정하고 n에서 작은 제곱수부터 빼주면서 dp[n] = dp[n - 제곱수] + 1 의 최소값을 구했..

알고리즘 2022.12.31

[백준/DP/C++] 2579번 계단 오르기

https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 한번에 한계단이나 두계단만 오를 수 있고 연속으로 세계단은 오를 수 없기 때문에 n-3계단에서 n-1을 건너 오는 경우(한계단)와 n-2에서 오는 경우(두계단)의 경우가 있을 수 있다 이 중 점수의 최대값을 구하면 된다 #include using namespace std; int n; int dp[301] = {0}, a[301] ={0}; int main(void) { cin >> n; for(int i=1..

알고리즘 2022.12.30

[백준/BFS/C++] 2178번 미로 탐색

https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net bfs를 사용하여 풀었고 생각해보니 visited를 안쓰고 if(graph[nx][ny] != 0 && visited[nx][ny]==false) 조건 대신 if(graph[nx][ny] == 1) 조건을 썼어도 됐을 것 같다 #include using namespace std; int n,m; int graph[101][101]; bool visited[101][101]; int dx[] = {-1, 1, 0, 0}; int ..

알고리즘 2022.12.30

[백준/DFS/C++] 4963번 섬의 개수

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 이 문제는 dfs를 이용해서 풀었다 *이차원배열* arr[0][0]​ arr[0][1]​ arr[0][2]​ arr[0][3]​ arr[1][0]​ arr[1][1]​ arr[1][2]​ arr[1][3]​ arr[2][0]​ arr[2][1]​ arr[2][2]​ arr[2][3]​ #include using namespace std; int w, h; int graph[51][51]; b..

알고리즘 2022.12.30

[백준/구현/C++] 2331번 반복수열

https://www.acmicpc.net/problem/2331 2331번: 반복수열 첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다. www.acmicpc.net 1. 우선 수를 한자리씩 분리한다 참고 : https://develop-me-z.tistory.com/103 [C++] 숫자 한자리씩 분리하기 숫자 쪼개기 10으로 나누면서 10으로 나눈 나머지를 분리해주면 된다 while(a!=0){ int rest = a%10; a /= 10; } develop-me-z.tistory.com 2. 각 자리를 거듭제곱하면서 더해준다 참고 : https://develop-me-z.tistory.com/104 [C++] 수 거듭 제곱하기 (POW 함수) 헤더파일 사용방법 po..

알고리즘 2022.12.29
728x90
반응형