본문 바로가기

전체 글

(120)
[ 백준 27468 ] 2배 또는 0.5배 (c/c++) https://www.acmicpc.net/problem/27468  [ 문제 요약 ]정수 N이 주어질 때 1 ~ N까지의 수를 임의의 인접한 세 수 Aₐᵢ, Aₐᵢ₊₁, Aₐᵢ₊₂에 대해 Aₐᵢ₊₁ - Aₐᵢ = Aₐᵢ₊₂ - Aₐᵢ₊₁ × 2 또는 Aₐᵢ₊₁ - Aₐᵢ = Aₐᵢ₊₂ - Aₐᵢ₊₁ × 0.5 조건에 맞는 수열로 출력한다.  [ 문제 풀이 ]1. 이 문제의 경우 무조건 수열을 만들 수 있기 때문에 만들 수 있는 지 검증하지 않아도 된다.2. N % 4 == 2 인 경우 2 + 4x, 1 + 4x, 3 + 4x, 4 + 4x 를 반복해서 출력한다.3. 그 이외의 경우에는 1 + 4x, 3 + 4x, 2 + 4x, 4 + 4x 를 반복해서 출력한다.  [ 소스 코드 ]#include usi..
[ 백준 12761 ] 돌다리 (c/c++) https://www.acmicpc.net/problem/12761  [ 문제 요약 ]현 위치에서 + 1, - 1, + A, - A, + B, - B, * A, * B 만큼 이동할 수 있고 N에서 M까지 가야할 때, 최소한의 이동 횟수를 출력한다. 단, 이동 과정에서 100,000보다 크거나 0보다 작은 경우는 존재하지 않는다.  [ 문제 풀이 ]1. BFS로 첫 위치에서 0 ~ 100,000 사이의 모든 갈 수 있는 곳으로 이동한다.2. 만약 이미 가 본적 있는 곳이라면 가지 않는다.3. 한 번 이동할 때마다 이동 횟수를 + 1을 한다.  [ 소스 코드 ]#include using namespace std;int N, M, A, B, num, cnt;int visited[101010];void BFS(..
[ 백준 17123 ] 배열 놀이 (c/c++) https://www.acmicpc.net/problem/17123  [ 문제 요약 ] (r1, c1, r2, c2, v)가 주어지는데, 이 연산은 (r1, c1)부터 (r2, c2)까지 사각형 영역에 속한 A[r, c]의 값을 v만큼 더하는 것일 때, N개의 정수로 표현된 각 행의 합과 열의 합을을 공백으로 구분하여 출력한다.  [ 문제 풀이 ]1. 누적합을 이용해서 최대한 반복을 적게 해야 한다.2.  (r1, c1, r2, c2, v)가 주어지면 diff[r1][c1] += v, diff[r1][c2 + 1] -= v, diff[r2 + 1][c1] -= v, diff[r2 + 1][c2 + 1] += v 를 통해 사각형 내부의 합이 증가하도록 한다.3. 연산 과정이 끝나면  배열의 수를 계산한다...
[ 백준 17826 ] 나의 학점은? (c/c++) https://www.acmicpc.net/problem/17826  [ 문제 요약 ]50명의 학생 점수와 홍익이의 점수가 주어질 때, 홍익이의 학점을 출력한다.  [ 문제 풀이 ]1. 학생 50명의 점수를 입력받는다.2. 홍익이의 등수를 파악한다.3. 홍익이의 등수에 맞는 학점을 출력한다.  [ 소스 코드 ]#include using namespace std;int num, N;int arr[55];int main() { for (int i=1; i> arr[i]; cin >> num; for (int i=1; i   [ 주의할 점 ]등수는 1등부터 이므로 1부터 받는다.
[ 백준 18428 ] 감시 피하기 (c/c++) https://www.acmicpc.net/problem/18428  [ 문제 요약 ]선생님은 장애물의 뒷편을 감시하지 못하고, 학생과 선생님과 장애물의 위치가 주어질 때, 정확히 장애물 3개를 설치하여 모든 학생들이 감시로 피할 수 있는 지 여부를 출력한다.  [ 문제 풀이 ]1. 주어지는 N의 최대 크기가 6이기 때문에 완전 탐색을 할 수 있다.2. X가 주어지는 곳을 기록한 뒤, DFS를 이용하여 가능한 장애물의 배치를 모두 시도해 본다.3. 선생님의 시선을 늘려가면서 만약 학생이 있다면 그 경우는 실패이다.4. 모든 경우를 했을 때에도 성공한 적이 없으면 NO, 아니면 YES를 출력한다.  [ 소스 코드 ]#include using namespace std;int N;char arr[10][10]..
[ 백준 1484 ] 다이어트 (c/c++) https://www.acmicpc.net/problem/1484  [ 문제 요약 ]G킬로그램은 성원이의 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것일 때, G가 주어졌을 때 가능한 현재 몸무게를 오름차순으로 출력한다.  [ 문제 풀이 ]1. 투 포인터를 이용해서 x는 1, y는 2에서 시작한다.2. 만약 제곱의 차가 G보다 작으면 x++, 크면 y++를 한다.3. 같은 경우 벡터에 넣는다.4. x와 y가 동일해지는 경우까지 반복한다.5. 벡터의 사이즈가 0인 경우 가능한 경우가 없으므로 -1을 출력한다.  [ 소스 코드 ]#include using namespace std;int x = 1, y = 2, cnt, G;vector v;void Find() { while (x..
[ 백준 1261 ] 알고스팟 (c/c++) https://www.acmicpc.net/problem/1261  [ 문제 요약 ]상하좌우로 움직일 수 있고, 벽을 부술 수 있으며 미로의 크기를 나타내는 가로 M, 세로 N이 주어질 때, (N, M)으로 이동하려면 벽을 부수어야 하는 최소값을 출력한다.  [ 문제 풀이 ]1. BFS을 이용하여 최단 경로를 구한다.2. 만약 맵에서 1을 지나가게 된다면 벽을 부순 횟수를 1 더한다.3. 현재 위치에서 이전에 벽을 부순 횟수와 이전 값을 비교하여 더 작은 수를 저장한다.  [ 소스 코드 ]#include using namespace std;int N, M;int arr[111][111], D[111][111];int dx[] = {0, 0, 1, -1};int dy[] = {1, -1, 0, 0};voi..
[ 백준 1043 ] 거짓말 (c/c++) https://www.acmicpc.net/problem/1043  [ 문제 요약 ]사람의 수 N과 파티의 수 M와 진실을 아는 사람의 수와 번호, 각 파티에 오는 사람들의 번호가 주어질 때, 지민이가 거짓말쟁이로 알려지지 않으면서, 과장된 이야기를 할 수 있는 파티 개수의 최댓값을 출력한다.  [ 문제 풀이 ]1. 각 파티에 있는 사람들끼리 Union 그룹을 만든다.2. 한 파티에 오는 사람들 중에 진실을 아는 사람이 있다는 지 Union Find를 통해 확인한다.  [ 소스 코드 ]#include using namespace std;int N, M, ans;int P[55];vector people[55];vector tp;void Init(int n){ ans = M; for (int i..