알고리즘 12

[알고리즘] 뱀 (백준, 3190)

문제 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 풀이 ruhz3/CodingTest To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub. github.com #include #include #include using namespace std; int N; int appleNum; int rotateNum; int map[101][101]; vector Snake; queue Ro..

[알고리즘] ⚾ (백준, 17281)

문제 17281번: ⚾ ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종 www.acmicpc.net 풀이 ruhz3/CodingTest To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub. github.com #include #include #include #include using namespace std; int N; int hitTable[50][9]; int entry[9]; vector field; int findMaxS..

[알고리즘] 2048(Easy) (백준, 12100)

문제 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 풀이 ruhz3/CodingTest To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub. github.com #include #include #include using namespace std; int board[20][20] = { 0 }; int N; int maxNum = 0; // 최대값 찾..

[알고리즘] 연구소 (백준, 14502)

문제 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 풀이 ruhz3/CodingTest To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub. github.com #include #include #include using namespace std; int row, col; int map[8][8]; bool check[8][8]; /*감염*/ void infection(int R, int C..

[알고리즘] 정수 삼각형 (백준, 1932)

문제 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 풀이 ruhz3/CodingTest To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub. github.com #include #include #include using namespace std; int map[500][500]; int cache[501][501]; int N; int findMaxWay(int row, int col) { int &ret = cache[row][col]; // 기..

[알고리즘] N-Queen (백준, 9663)

문제 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 ruhz3/CodingTest To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub. github.com #include #include using namespace std; // ex) map[4] = 3 : 4열에 있는 퀸은 3행에 놓여 있습니다. int map[15]; int N; // 이 자리에 퀸을 놓아도 될지 검사 bool c..

[알고리즘] 카라추바의 빠른 곱셈(Karatsuba)

123 × 456 = ? 평소에 일상적으로 계산하던 방법을 분석적으로 풀어써보면 이렇다. 우리는 평소 한 자리에 0부터 9까지의 숫자만 사용하는 십진법을 사용하기 때문에, 각 자리별로 십의 자리 수는 다음 칸으로 넘겨준다(예를 들어 10의 자리 27은 (20 + 7)이므로 100의 자리로 2를 넘겨준다). (4 * 10000) + (13 * 1000) + (28 * 100) + (27 * 10) + (18 * 1) = (5 * 10000) + (6 * 1000) + (0 * 100) + (8 * 10) + (8 * 1) = 56088 최종적으로 값을 이렇게 계산해 낼 수있다. 456의 갯수만큼, 123의 각 원소(1, 2, 3)과 한 번씩 곱셈연산을 해야함을 알 수있다. 따라서 전통적인 방법으로는 만약 ..

[알고리즘] 분할정복(Divide & Conquer)

의 해당 단원 밑줄입니다. "분할 정복을 사용하는 알고리즘들은 대개 세 가지의 구성 요소를 갖고 있습니다. 문제를 비슷한 크기의 더 작은 문제로 분할하는 과정(divide) 각 문제에 대해 구한 답을 원래 문제에 대한 답으로 병합하는 과정(merge) 더이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제(base case)" "같은 문제라도 어떻게 분할하느냐에 따라 시간 복잡도 차이가 커진다는 것을 보여주는 좋은 예입니다. 여러번 중복되어 계산되면서 시간을 소모하는 부분 문제들이 있기 때문입니다." ​​ 병합 정렬 (Merge Sort) 수열을 가운데에서 쪼개 두 개의 부분수열로 만들고, 각 부분 수열에 대해서도 같은 절차를 재귀 호출한다. 기저 사례(base case)까지 쪼개 값이 반환되면, ..

[알고리즘] 완전탐색(CLOCKSYNC)

algospot.com :: CLOCKSYNC Synchronizing Clocks 문제 정보 문제 그림과 같이 4 x 4 개의 격자 형태로 배치된 16개의 시계가 있다. 이 시계들은 모두 12시, 3시, 6시, 혹은 9시를 가리키고 있다. 이 시계들이 모두 12시를 가리키도록 �� algospot.com #include #include #include using namespace std; queue answer; const int button[10][5] = { {0, 1, 2, -1, -1}, {3, 7, 9, 11, -1}, {4, 10, 14, 15, -1}, {0, 4, 5, 6, 7}, {6, 7, 8, 10, 12}, {0, 2, 14, 15, -1}, {3, 14, 15, -1, -1}, ..

[알고리즘] 완전탐색(BOARDCOVER)

algospot.com :: BOARDCOVER 게임판 덮기 문제 정보 문제 H*W 크기의 게임판이 있습니다. 게임판은 검은 칸과 흰 칸으로 구성된 격자 모양을 하고 있는데 이 중 모든 흰 칸을 3칸짜리 L자 모양의 블록으로 덮고 싶습니다. 이 �� www.algospot.com #include #include #include using namespace std; queue answer; int row, col; int matrix[20][20]; int run() { /* 왼쪽 위 부터 탐색하여 비어있는 칸을 x,y에 저장 * flag 지정하여, 찾는 즉시 반복문 탈출 * x, y가 반복문을 그대로 통과하면 모두 채워졌다는 의미 >> 1을 반환(result에 더해짐) */ int x = -1; int ..