본문 바로가기

백준

(229)
[C++] 백준 24480번 - 알고리즘 수업(깊이 우선 탐색 2) 문제 24480번https://www.acmicpc.net/problem/24480 이번에는 어제 풀었던 문제랑 다른 점이 하나 있다. 바로 인접 정점은 내림차순으로 방문한다는 것이다.그렇기때문에 sort로 정렬하는 과정에서 greater()만 뒤에 추가해주면 오름차순이 아닌 내림차순으로 정렬시켜줄 수 있다. 어제는 공부하고 풀었기 때문에 다음에는 안 보고 잘 풀 수 있을까 했는데 다행히 오늘 풀어봤을 때 잘 기억하고 있는 것 같다. #include #include #include using namespace std;vector graph[100001];bool visited[100001];int result[100001];int cnt = 0;void dfs(int r) { if (visited[r]..
[C++] 백준 24479번 - 알고리즘 수업(깊이 우선 탐색 1) 문제 24479번https://www.acmicpc.net/problem/24479 모든 간선의 쌍을 벡터에 넣어준다. 이때 양방향 간선이기 때문에 반대인 경우도 같이 넣어준다. 그리고 인접 정점은 오름차순으로 방문하기 때문에 sort로 정렬해준다.  깊이 우선 탐색을 하기 위해 따로 함수로 만들어주었다. 만약 방문한 점이면 빠져나와주고 아니라면 방문 표시를 한 후 해당 정점을 결과 배열에 넣어준다. 그리고 해당 정점과 연결된 점을 차례로 방문해준다. 그렇게 다 방문하면 result를 출력해준다. #include #include #include using namespace std;vector graph[100001];bool visited[100001];int result[100001];int cnt ..
[C++] 백준 10870번 - 피보나치 수 5 문제 10870번https://www.acmicpc.net/problem/10870 이번에도 재귀 문제이다. 0번째는 0이고 1번째는 1이기 때문에 해당 수일 때는 각 숫자에 맞는 수를 리턴해준다. 그리고 2번째부터는 fibo()함수를 피보나치 수 식에 맞게 리턴하여 재귀한다.  #include using namespace std;int fibo(int num) { if (num == 0) { return 0; } else if (num == 1) { return 1; } else { return fibo(num - 1) + fibo(num - 2); }}int main() { int n; cin >> n; cout
[C++] 백준 27433번 - 팩토리얼 2 문제 27433번https://www.acmicpc.net/problem/27433 처음에 int를 했다가 허용범위를 넘어가는 숫자가 있어서 long long으로 바꿔주었다.0!과 1!은 1이기 때문에 입력받은 값이 1보다 작거나 같다면 1을 리턴해준다. 다른 숫자면 재귀함수를 사용한다. #include using namespace std;long long fac(int num) { if (num > n; cout
[C++] 백준 1010번 - 다리 놓기 문제 1010번https://www.acmicpc.net/problem/1010 n에서 순서상관없이 m개를 선택하는 것이기 때문에 nCm을 사용한다.nCm에서 n이 5이고 m이 2라면 (5x4)/(2x1)이다. 따라서 m-n+1부터 m까지 곱(예시 5x4)해주고, 여기에 j - (m - n)을 나눠준다. 그러면 1부터 시작하여 해당 수까지 나눌 수 있다.#include using namespace std;int main() { int T, n, m; cin >> T; for (int i = 0; i > n >> m; for (int j = m - n + 1; j
[C++] 백준 11050번 - 이항 계수 1 문제 11050번https://www.acmicpc.net/problem/11050 이항 계수란 주어진 집합에서 순서없이 원하는 개수만큼 뽑는 조합의 개수를 의미한다. 이항 계수의 식에 맞게 계산식을 써주고 펙토리얼 계산은 따로 함수로 만들었다. 반복문을 사용하여 펙토리얼을 계산해주었다. 0!은 1이기 때문에 1을 리턴해주고, 다른 값들은 1부터 해당 값까지의 숫자를 다 곱해주고 리턴해준다.#include using namespace std;int fac(int a) { if (a == 0) { return 1; } int num = 1; for (int i = 1; i > n >> k; cout
[C++] 백준 24723번 - 녹색거탑 어제 조합론을 푼 김에 계속해서 조합론을 풀어보려고 한다. 문제 24723번https://www.acmicpc.net/problem/24723  문제를 보니까 상자에서 2개의 길로 내려올 수 있으니 1층은 2, 2층은 4, 3층은 8 ... 이런 식으로 결과가 나와야 한다. 따라서 녹색거탑의 정상에서 바닥으로 내려오는 경우의 수는 2^n인 것이다. C++에서는 제곱연산자가 없기 때문에 math.h를 인클루드 하고 pow를 사용하였다. #include #include using namespace std;int main(){ int n; cin >> n; cout
[C++] 백준 15439번 - 베라의 패션 오늘은 몸이 좀 안 좋아서 간단한거 풀고 쉬어야되겠다...  문제 15439번https://www.acmicpc.net/problem/15439 상의와 하의가 서로 다른 색상인 조합을 구해야하기 때문에, 상의 중에 n벌에서 뽑으면 하의 중에는 1을 뺀 n-1벌에서 뽑을 수 있는 것이다. 따라서 n*(n-1) #include using namespace std;int main() { int n; cin >> n; cout