알고리즘/BOJ 1235

백준 14210번 Kartomat

문제 링크입니다: https://www.acmicpc.net/problem/14210 문자열 탐색 및 구현 문제였습니다.14209번과 마찬가지로 꽤나 쉬운 문제였습니다. #include #include #include using namespace std; string keyboard[4] = { "***ABCDE", "FGHIJKLM", "NOPQRSTU", "VWXYZ***" }; string destination[50]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for (int i = 0; i > destination[i]; string input; cin >> input; vec..

알고리즘/BOJ 2018.08.19

백준 8112번 0과 1 - 2

문제 링크입니다: https://www.acmicpc.net/problem/8112 백준 8111번 0과 1(http://jaimemin.tistory.com/791)에서 MAX만 바꾸어주면 되는 문제였습니다. #include #include #include using namespace std; const int MAX = 1000000 + 1; int N; pair arr[MAX]; bool visited[MAX]; void BFS(void) { queue q; //1부터 시작 q.push(1); visited[1] = true; arr[1].first = -1; arr[1].second = '1'; while (!q.empty()) { int temp = q.front(); q.pop(); int p..

알고리즘/BOJ 2018.08.14

백준 8111번 0과 1

문제 링크입니다: https://www.acmicpc.net/problem/8111 BFS(Breadth First Search) 알고리즘을 적용하여 푸는 문제였습니다.결과가 100의 자리 숫자가 나올 수 있었기 때문에 메모리 초과가 엄청 발생했던 문제였습니다. 알고리즘은 아래와 같습니다.1. 1은 1로만 이루어져 있는 숫자이기 때문에 1을 출력해줍니다.2. N이 1이 아니라면 1부터 큐에 넣고 BFS를 시작합니다.3. 0과 1로만 이루어져 있어야하기 때문에 큐에서 제일 앞에 있는 숫자에서 10을 곱한 숫자와 (10을 곱한 숫자 + 1)을 큐에 넣어줍니다.i) 여기서 핵심 포인트는 오버플로우를 방지하기 위해 큐에 넣을 숫자들을 N으로 나누었을 때 나머지를 넣어주는 것입니다.ii) 그리고 visited 배..

알고리즘/BOJ 2018.08.14

백준 6591번 이항 쇼다운

문제 링크입니다: https://www.acmicpc.net/problem/6591 순열과 조합을 배웠다면 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다.1. nCr = nCn-r 이기 때문에 연산 횟수를 줄이기 위해 K를 min(K, N-K)로 지정해줍니다.2. nCr = nPr / r! 입니다.->따라서, 1~K까지 반복문을 돌리면서 결과에서 나누어주고 N--를 곱해줍니다.3. 결과는 int형이지만 중간 계산 과정에 long long형이 등장할 수 있기 때문에 주의해줘야합니다. #include #include #include //memset using namespace std; int N, K; int main(void) { ios_base::sync_with_stdio(0); cin.tie(..

알고리즘/BOJ 2018.08.10

백준 15501번 부당한 퍼즐

문제 링크입니다: https://www.acmicpc.net/problem/15501 STL 벡터에 친숙한 사람들은 모두 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다.1. 두 번째 배열을 입력 받을 때 첫 번째 배열의 시작 인덱스에 있는 숫자와 같은 숫자가 배치된 인덱스를 찾습니다.2. 1번에서 찾은 인덱스로부터 첫 번째 배열과 동일한지 파악합니다.-> 일치하면 "good puzzle" 출력3. 2번에서 동일하지 않았다면 두 번째 배열을 뒤집은 다음에 2번을 다시 시도합니다.-> 그래도 일치하지 않으면 "bad puzzle" 출력 #include #include #include using namespace std; const int MAX = 1000000; int N; vector arr; v..

알고리즘/BOJ 2018.08.10

백준 14649번 문홍안

문제 링크입니다: https://www.acmicpc.net/problem/14649 단순 구현 문제였습니다. 알고리즘은 아래와 같습니다.1. 'R'이 입력되면 주어진 돌 기준으로 오른쪽에 있는 돌들은 모두 한 번씩 밟습니다.2. 'L'이 입력되면 주어진 돌 기준으로 왼쪽에 있는 돌들은 모두 한 번씩 밟습니다.3. 마지막에 각 돌들의 색깔을 파악해서 계산해주면 됩니다. #include using namespace std; const int MAX = 100 + 1; int P, N; int stone[MAX]; //0: blue, 1: red, 2: green int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); //cin 실행속도 향상 cin >> P..

알고리즘/BOJ 2018.08.10

백준 14648번 쿼리 맛보기

문제 링크입니다: https://www.acmicpc.net/problem/14648 간단한 세그먼트 트리(Segment Tree) 구현 문제였습니다. 코드의 주석에 다 설명되어있기 때문에 설명은 생략하겠습니다. #include #include #include using namespace std; struct segmentTree{ //배열의 길이 int n; //각 구간의 부분합 vector pSum; segmentTree(const vector &array) { n = array.size(); pSum.resize(n * 4); init(array, 0, n - 1, 1); } //node 노드가 array[left...right] 배열을 표현 //node를 루트로 하는 서브트리 초기화 long lo..

알고리즘/BOJ 2018.08.10