알고리즘/BOJ 31

백준 15666번 N과 M (12)

문제 보러가기 : https://www.acmicpc.net/problem/15666 15666번: N과 M (12) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 《문제 풀이》 1. 중복되는 수열을 여러 번 출력하면 안 되므로 set 컨테이너 사용 2. s 에 입력한 숫자가 없을 경우에만 벡터 v 에 해당 숫자 삽입 3. 비내림차순을 위해 (1) 벡터 요소 정렬 (2) 인덱스를 저장할 배열에 자신의 인덱스부터 삽입 4. 현재 인덱스가 M과 같으면 v[arr[i]] 출력 《C+..

알고리즘/BOJ 2021.01.21

백준 11725번 트리의 부모 찾기

문제 보러가기 : https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 이번 문제는 깊이 우선 탐색(DFS) 문제였습니다. 《문제 풀이》 1. 입력 받은 두 정점은 연결되어 있기 때문에 양방향으로 삽입 2. 1번 정점부터 dfs 수행 3. dfs 수행할 때마다 해당 정점의 방문 여부를 true 로 설정 4. 연결된 정점을 방문하지 않았다면 해당 노드 삽입 (이것이 부모 노드 번호) 5. 배열 arr 에 저장된 숫자들 출력 《C++ 코드》 #include #include #define MAX 100001 using..

알고리즘/BOJ 2021.01.19

백준 9663번 N-Queen

문제 보러가기 : https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 이번 문제는 전형적인 백트래킹(BackTracking) 문제였습니다. 2차원 배열을 직접 선언하지 않고 1차원 배열을 선언하여 배열의 인덱스는 행을 나타내고 배열에 저장된 값은 열을 나타내도록 해주었습니다. 《문제 풀이》 1. 퀸을 놓을 위치를 찾기 위해 dfs 수행 --> queen(0) 부터 시작 2. 퀸을 놓을 위치가 유망한 위치인지 검사하기 위한 함수 possible (1) chess[1..

알고리즘/BOJ 2021.01.18

백준 10830번 행렬 제곱

문제 보러가기 : https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 이번 문제는 분할 정복 문제였습니다. 《문제 풀이》 1. B의 최댓값이 1000억이므로 long long 자료형으로 선언 2. 2차원 벡터의 공간을 N*N 크기로 할당해줌 --> A(N, vector(N)) 3. 행렬의 곱을 연산하는 부분은 연산자 오버로딩을 통해 구현 --> matrix operator * (const matrix &a, const matrix &b) 4. A의 B제곱 연산횟..

알고리즘/BOJ 2021.01.18

백준 13549번 숨바꼭질 3

문제 보러가기 : https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 이번 문제는 너비 우선 탐색(BFS) 문제였습니다. 《문제 풀이》 1. 순간이동을 하는 경우에는 0초가 걸리므로 우선순위 큐를 이용하여 정렬 2. { 0, N } 을 큐에 삽입 (0은 경과 시간) 3. 순간이동을 하는 경우가 경과 시간이 가장 짧으므로 해당 if 문을 가장 위에 작성 4. 큐에 삽입할 때 해당 위치의 visited 배열 true ..

알고리즘/BOJ 2021.01.16

백준 12851번 숨바꼭질 2

문제 보러가기 : https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 이번 문제는 너비 우선 탐색(BFS) 문제였습니다. 《문제 풀이》 1. { N, 0 } 을 큐에 삽입 (0은 경과 시간) 2. 동생을 가장 빠른 시간으로 찾는 방법의 수를 구해야 하므로 pop 이후에 방문 체크 3. 수빈이가 갈 수 있는 세 가지 위치가 범위에 충족되면 큐에 삽입 4. 최초로 동생 위치에 도달한 경우, 경과 시간을 result..

알고리즘/BOJ 2021.01.16

백준 16953번 A → B

문제 보러가기 : https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 이번 문제는 너비 우선 탐색(BFS) 문제였습니다. 《문제 풀이》 1. A → B 로 바꾸는 과정에서 int 범위를 벗어날 수 있으므로 long long 자료형 사용 2. { A, 0 } 을 큐에 삽입 (0은 연산횟수) 3. 현재값에 2를 곱한 값과 가장 오른쪽에 1을 더한 값을 큐에 삽입 4. 현재값이 B와 같다면 연산횟수 + 1 반환 5. 현재값이 B보다 크다면, 더 연산해도 B가 나올 수 없으므로 continue 《C++ 코드》 #include #include using namespace std; ..

알고리즘/BOJ 2021.01.16

백준 15663번 N과 M (9)

문제 보러가기 : https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 《문제 풀이》 1. N개의 수를 중복없이 담을 v 벡터 2. 중복된 수만큼 사용하기 위해 cnt[10000] 배열 선언 3. result[0] 부터 시작하기 위해 NandM(0) 호출 4. result 배열에 수를 저장할 때마다 cnt[v[i]]-- 5. 재귀 호출 후, 다시 cnt[v[i]]++ 《C++ 코드》 #i..

알고리즘/BOJ 2021.01.11

[백준] 15654번 N과 M (5) C++

문제 보러가기 : https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 백트래킹(backtracking)이 무엇인지 모르겠다면 이전 블로그를 참고해주세요 😊 《문제 풀이》 1. N개의 수를 입력받을 arr 배열과 순열을 출력하기 위한 result 배열 선언 2. 중복 순열은 출력하면 안되므로 boolean 타입의 visited 배열 필요 3. 사전 순으로 증가하는 순서로 출력하기 ..

알고리즘/BOJ 2021.01.09

[백준] 15650번 N과 M (2) C++

문제 보러가기 : https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이번 문제는 백트래킹(BackTracking) 문제였습니다. 문제를 풀이하기 전에 백트래킹(BackTracking)이 무엇인지 알아보겠습니다. 백트래킹(BackTracking) 백트래킹(backtracking)이란, 모든 곳을 방문하여 노드의 개수가 많아질 때 비효율적일 수 있는 DFS에 가지치기(Prunung)를 통해 가도 되지 않는 루트는 고려하지 않고 탐색하는 완전 탐색 ..

알고리즘/BOJ 2021.01.07
반응형