목록백준 알고리즘 (164)
N
https://www.acmicpc.net/problem/23290 23290번: 마법사 상어와 복제 첫째 줄에 물고기의 수 M, 상어가 마법을 연습한 횟수 S가 주어진다. 둘째 줄부터 M개의 줄에는 물고기의 정보 fx, fy, d가 주어진다. (fx, fy)는 물고기의 위치를 의미하고, d는 방향을 의미한다. 방향 www.acmicpc.net #include #include #include #include #define PAIR pair using namespace std; int S; int sharkX; int sharkY; int sx[4] = {-1, 0, 1, 0}; int sy[4] = {0, -1, 0, 1}; int dx[8] = {0, -1, -1, -1, 0, 1, 1, 1}; int..
https://www.acmicpc.net/problem/23289 23289번: 온풍기 안녕! 유난히 추운 날씨가 예상되는 이번 겨울을 대비하기 위해 구사과는 온풍기를 설치하려고 한다. 온풍기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기 www.acmicpc.net 문제 설명이 길어 상당히 까다로웠다. 그러나 순서에 맞춰 차례대로 하나씩 하면 풀기 쉬울 것 같다. ===전역 변수=== 우선 전역 변수부터 설정한다. R, C, K는 각각 행, 열, 일정 온도를 뜻한다. chocolate은 출력할 값이다. dx, dy 배열은 온풍기의 바람 방향을 뜻하며, 상하좌우의 순서다. windX, windY 배열은 바람이 이동하는 방향을 나타냈으며, 바람의 상하좌우 방향에..
https://www.acmicpc.net/problem/23288 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net 클래스로 주사위를 굴리는 전체 상황을 만들었다. 우선 전역변수로는 세로, 가로의 크기인 N, M. 상하좌우 이동할 방향을 나타내는 배열 dx, dy. 최대 20 x 20의 크기를 가지는 board를 선언했다. Dice 클래스. 현재 좌표를 나타내는 x, y. 주사위의 상태를 나타내는 dice로, 처음에는 {1, 3, 4, 5, 2, 6}으로 초기화했다. 이동할 방향을 나타내는 d..
https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net DFS를 이용한 완전 탐색. 우선 N x N 크기의 보드를 만든 후 숫자를 저장한다. 이후 for문을 이용하여 상,하,좌,우로 움직이는데, 이를 dfs 함수로 한다. dfs 함수는 (방향, 보드, 움직인 횟수)를 매개변수로 넘겨준다. dfs() 우선 dfs 종료 조건을 정의한다. count == 5면 board를 순회하여 answer보다 큰 숫자를 갱신한 후 retur..
문제 KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다. 같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다. 예를 들어, 주어진 용액들의 특성값이 [-2, 4, -99, -1, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액..
문제 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000) 출력 문제의 조건을 만족하는 쌍의 개수를 출력한다. 투 포인터 알고리즘. n개의 수를 v 벡터에 담아 저장한다. v를 오름차순으로 정렬한 후 투 포인터 시작. start = 0, end = n - 1로 시작을 한다. star..
문제 어떤 N개의 수가 주어져 있다. 그런데 중간에 수의 변경이 빈번히 일어나고 그 중간에 어떤 부분의 합을 구하려 한다. 만약에 1,2,3,4,5 라는 수가 있고, 3번째 수를 6으로 바꾸고 2번째부터 5번째까지 합을 구하라고 한다면 17을 출력하면 되는 것이다. 그리고 그 상태에서 다섯 번째 수를 2로 바꾸고 3번째부터 5번째까지 합을 구하라고 한다면 12가 될 것이다. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 수가 주어진다. 그리고 N+2번째 줄부터 N+M+K+1번째 줄까지 세 ..
문제 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 팬윅 트리(바이너리 인덱스 트리)를 사용한 문제. 처음 배우는 알고리즘이라 낯설었지만, 공부하면 굉장히 놀라운(?) 알고리즘이다. 아래 사이트에서 자세히 배울 수 있다. https://www.acmicpc.net/blog/view/21 펜윅 트리 (바이너리 인덱스 트리) 블로그: 세그먼트 트리 (Segment ..