본문 바로가기

분류 전체보기123

[백준 3055] 탈출 (C++) A. 문제설명 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제�� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. R*C 배열크기 땅이 존재 2. 각 배열의 엔트리에는 빈칸, 물, 비버굴, 돌이 존재 3. 고슴도치는 주어진 위치에서 물과 돌을 피해 빈칸을 이동하며 비버굴에 가고자 함 4. 물이 고슴도치를 덮치기 전에 가장 빨리 비버굴에 갈 수 있는 시간을 구하라 B. 접근법 Double BFS 일반적인 배열 주변 영역 전파 문제에서는 BFS를 쉽게 적용할 수 있.. 2020. 8. 27.
[백준 2529] 부등호 (C++) A. 문제설명 https://www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. k개의 나열된 부등호가 존재 2. 그 사이에 해당 조건을 만족하는 k+1개의 숫자를 넣고자 한다. 3. k+1의 숫자는 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 4. 여기서, 구해지는 숫자 중 제일 작은 수와 큰 수를 구하라 B. 접근법 DFS DFS와 가지치기를 이용하면 이 문제를 적은 시간 비용으로 풀 수 있다. 일반적.. 2020. 8. 25.
[백준 16197] 두 동전 (C++) A. 문제설명 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, �� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*M 게임판과 두 동전이 주어짐 2. 게임판에는 빈 공간, 동전, 벽이 있을 수 있음 3. 게임판을 조작하여 두 동전을 모두 상하좌우 같은 방향으로 움직임 4. 여기서, 동전의 이동조건은 아래와 같음 동전이 이동하려는 칸이 벽이면, 동전은 이동하지 않는다. 동전이 이동하려는 방향에 칸이 없으면 동전은 보드 바깥으로 떨어진다. 그 외.. 2020. 8. 18.
[백준 11559] Puyo Puyo (C++) A. 문제설명 https://www.acmicpc.net/problem/11559 문제에 대한 자세한 설명은 링크 참조 1. 12*6 푸요푸요 게임판이 주어짐 2. 필드에 R/G/B/Y 뿌요를 놓음. 뿌요는 중력의 영향을 받아 아래에 바닥이나 다른 뿌요가 나올 때까지 아래로 떨어짐 3. 같은 색 뿌요가 4개 이상 상하좌우로 연결되어 있으면 연결된 같은 색 뿌요들이 한꺼번에 없어짐 4. 뿌요들이 없어지고 나서 위에 다른 뿌요들이 있다면, 역시 중력의 영향을 받아 차례대로 아래로 떨어짐 5. 아래로 떨어지고 나서 다시 같은 색의 뿌요들이 4개 이상 모이게 되면 또 터지고 연쇄 작용이 일어남 6. 상대방의 필드가 주어졌을 때, 몇 연쇄가 일어날 지 예측할 것 B. 접근법 BFS 1. 푸요푸요의 연쇄작용 계산 .. 2020. 8. 16.
[백준 19236] 청소년 상어 (C++) A. 문제설명 https://www.acmicpc.net/problem/19236 문제에 대한 자세한 설명은 링크 참조 1. 4*4 배열공간에 물고기의 번호와 방향이 각각 주어짐 2. 물고기의 방향은 1~8로, 12시방향부터 45도씩 반시계방향으로 각각 회전하여 주어짐 3. 이 배열공간 안 (0,0) 위치에 상어가 들어가 사냥을 시작 4. 상어는 (0,0) 위치의 물고기를 먹고 해당 물고기의 방향을 가짐 5. 이후 번호 순서대로 물고기가 이동, 물고기는 한 칸을 이동할 수 있고, 이동할 수 있는 칸은 빈 칸과 다른 물고기가 있는 칸이다. 현재 방향에서 이동하지 못할 경우 반시계방향으로 45도씩 회전하며 이동할 공간을 찾음 6. 물고기의 이동이 끝나면 다시 상어가 이동, 상어는 방향에 있는 칸으로 이동할 .. 2020. 8. 16.
[백준 17281] ⚾ (C++) A. 문제설명 https://www.acmicpc.net/problem/17281 문제에 대한 자세한 설명은 링크 참조 1. 9명으로 이루어진 야구팀의 선수들이 N이닝동안 플레이 2. 1번부터 9번의 타자들은 매 이닝마다 3아웃이 발생할 때까지 순환하며 타석에 들어감(1→2→3→...→8→9→1→2→...) 3. 각 타자가 타석에서 내는 결과는 아웃/안타/2루타/3루타/홈런로 아래와 같음 안타: 타자와 모든 주자가 한 루씩 진루 2루타: 타자와 모든 주자가 두 루씩 진루 3루타: 타자와 모든 주자가 세 루씩 진루 홈런: 타자와 모든 주자가 홈까지 진루 아웃: 모든 주자는 진루하지 못하고, 공격 팀에 아웃이 하나 증가 4. 매 이닝마다 타자가 수행할 결과는 정해짐 5. 감독은 1번 선수를 4번 타자로 선점.. 2020. 8. 6.
[백준 16985] Maaaaaaaaaze (C++) A. 문제설명 https://www.acmicpc.net/problem/16985 문제에 대한 자세한 설명은 링크 참조 1. 5*5 크기 판이 5개 주어짐 2. 각 판에는 들어갈 수 있는 칸과 들어갈 수 없는 칸이 구분됨 3. (0,0,0)에서 시작하여 (4,4,4)로 도착하는 경로 탐색 4. 각 판은 90도씩 360도 시계/반시계 방향으로 전부 돌릴 수 있으나 뒤집는 것은 허용되지 않음 5. 회전을 완료한 후, 5개의 판을 쌓음. 이 때 판을 쌓는 조합은 바뀌어도 됨 6. 모든 경우를 탐사해보아도 끝점에 도달불가한 경우 -1 출력, 끝점에 도달 가능한 경우 최적의 경로를 구하라 B. 접근법 DFS(조합구하기) + BFS(경로탐색) 먼저 문제의 조건들을 정리하면 5*5*5의 3차원 정육면체의 공간에서 (.. 2020. 8. 6.
[백준 17135] 캐슬 디펜스 (C++) A. 문제설명 https://www.acmicpc.net/problem/17135 문제에 대한 자세한 설명은 링크 참조 1. N*M 크기의 땅이 주어짐 2. 각 배열 안에는 적들이 위치하여 한턴마다 아래로 내려옴 3. 궁수 3명이 N+1번째 행에 위치하여 성을 지킴 3. 궁수들은 주어진 사정범위 D안에 들어온 적 중, 가장 가까운 적, 만약 가장 가까운 적이 여럿이라면 그 중에 가장 좌측의 적을 공격 4. 매 턴마다 적들이 내려오고 궁수들은 적을 공격하며 배열내 적들이 모두 내려올 때까지 반복 5. 궁수들이 위치하는 경우 중 최대로 적을 많이 죽일 수 있는 수를 구하라 B. 접근법 DFS + 시뮬레이션 우선, 궁수들이 성벽에 배치되는 경우에 대해서 중복되지 않도록 DFS로 모든 경우를 구해준다. 그리고,.. 2020. 7. 31.
[백준 17070] 파이프 옮기기 1 (C++) A. 문제설명 https://www.acmicpc.net/problem/17070 문제에 대한 자세한 설명은 링크 참조 1. N*N 크기의 땅이 주어짐 2. 위와 같은 파이프를 좌표 (N, N)까지 미는데, 미는 중간에 벽지가 있으면 안됨 3. 또한, 파이프는 밀면서 회전시킬 수 있고, 그 방향은 가로/세로/대각선임 4. 가로는 우측, 우하향만, 세로는 하향, 우하향만, 대각선은 우측, 하향, 우하향 모두 밀 수 있음 5. 파이프를 한쪽 끝에서 반대쪽 끝까지 밀 수 있는 모든 경우 구하기 B. 접근법 DFS 파이프의 방향별 미는 규칙에 따라 해당 밀 위치에 벽지가 있는지 확인하고, 없는 경우에만 깊이 우선탐색을 하도록 함 C. 풀이 1. 좌측 상단 모서리에서부터 탐색 진행 2. 나의 경우, 파이프가 회전.. 2020. 7. 28.
[백준 14890] 경사로 (C++) A. 문제설명 https://www.acmicpc.net/problem/14890 문제에 대한 자세한 설명은 링크 참조 1. N*N 크기의 땅이 각각 높이가 다른 땅이 주어짐 2. 각각의 칸마다, 높이 1씩 차이나는 땅에 대해 경사로를 설치하려 함 3. 설치 조건은 아래와 같다. 3-1. 경사로는 낮은 칸에 놓으며, L개의 연속된 칸에 경사로의 바닥이 모두 접해야 한다. 3-2. 낮은 칸과 높은 칸의 높이 차이는 1이어야 한다. 3-3. 경사로를 놓을 낮은 칸의 높이는 모두 같아야 하고, L개의 칸이 연속되어 있어야 한다. 4. 주어진 땅에서 경사로를 놓아 길을 만들 수 있는 경우를 모두 구하라 B. 접근법 시뮬레이션 N*N 크기의 땅을 N행 + N열의 각각의 1차원 배열로 잘라내어 1차원 배열에 대해 .. 2020. 7. 16.
[SWEA 8934] 팰린드롬 공포증 (C++) A. 문제설명 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW5jJcZ68LsDFATQ 문제에 대한 자세한 설명은 링크 참조 1. 앞뒤로 뒤집어도 똑같은 문자열을 팰린드롬이라고 한다. 2. 예를 들어, “o_o”, “404”, “appa” 는 팰린드롬 이지만, “umma”, “koosaga”, “kriii”는 팰린드롬이 아니다. 3. a,b,c로 이루어진 주어진 문자열 내 길이가 2이상인 팰린드롬을 없애고자 한다. 4. 여기서 주어진 문자열내 문자들은 각각 바꿀 수 있으며 해당 주어진 문자열의 서브스트링이 팰린드롬이어도 팰린드롬이다. 5. 문제에서 각 문자열이 주어질 때, 해당 문자열을 수정하여 팰린드롬이 아닌.. 2020. 7. 7.
[백준 14503] 로봇 청소기 (C++) A. 문제설명 https://www.acmicpc.net/problem/14503 문제에 대한 자세한 설명은 링크 참조 1. 로봇 청소기가 방 안을 청소 2. 방은 N*M 크기의 배열로 되어있으며 벽이 있는 공간은 청소할 수 없음 3. 로봇청소기는 먼저 현재 위치를 청소하고 3-1. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진 3-2. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전 3-3. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진 3-4. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춤 4. 최종적으로 청소기가 동작을 멈출 때, 청소한 칸.. 2020. 7. 7.
[백준 14501] 퇴사 (C++) A. 문제설명 https://www.acmicpc.net/problem/14501 문제에 대한 자세한 설명은 링크 참조 1. 퇴사전 남은 N일동안 최대한 많은 상담을 하려함 2. 상담시 걸리는 시간 Ti와 받는 보수 Pi가 각각 일별로 주어짐 3. 상담일의 일정을 적절히 배분하여 보수를 최대로 받을 수 있는 금액 구하기 B. 접근법 DFS + 시뮬레이션 N일의 일정동안 상담을 수행할지 말지에 대한 시리얼로 조합을 구하고 해당 조합을 완전탐색으로 시뮬레이션 한다. 그 중 최대가 되는 보수를 구하기 C. 풀이 1. 모든 조합을 만듬 2^15개 최대 2. for 모든 조합에 대한 시뮬레이션 수행, 그러나 불가능하면(일정 겹치거나, 안끝나는 것) 중간 종료 3. 매 시뮬레이션이 끝날 때, 수행 값의 최대를 업데.. 2020. 6. 16.
[백준 17143] 낚시왕 (C++) A. 문제설명 https://www.acmicpc.net/problem/17143 문제에 대한 자세한 설명은 링크 참조 1. 크기가 R*C인 지도가 존재 2. 해당 지도 위 각 칸에 상어가 존재하는데, 각각의 상어는 크기/방향/속력 정보를 가짐 3. 낚시왕은 처음 1열에 위치해있다가 오른쪽으로 한칸씩 이동하며 해당 열의 가장 상단의 상어를 잡는다. 4. 낚시 후 상어들이 현재 위치에서 주어진 방향으로 속도만큼 이동하는데, 여기서 벽을 만나면 방향은 반대로 바꾸고 속력을 유지한채로 이동한다. 5. 낚시왕이 끝열까지 이동하면서 잡을 수 있는 상어의 크기의 합 구하기 B. 접근법 시뮬레이션 낚시왕이 1~C 행까지 이동할 동안 상어의 이동 시뮬레이션 함수를 구현하여 움직임을 모사한다. 여기서 까다로운 점은 상어.. 2020. 6. 7.
[SWEA 9088] 다이아몬드 (C++) A. 문제설명 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW7Oktj6WMQDFAWY 문제에 대한 자세한 설명은 링크 참조 1. 각각 크기가 다른 N개의 다이아몬드가 존재 2. 이 중 몇개를 골라 선물을 하려고 한다. 3. 다이아몬드 묶음은 K개의 크기차이 이하인 것들이어야 함 4. 묶음 중 최대로 줄 수 있는 다이아몬드의 수를 구하라 B. 접근법 정렬 + Sliding Window 먼저 N개의 다이아몬드를 오름차순으로 정렬한다. 그 다음 head와 tail을 옮겨가며 Sliding Window를 이동하여 K개 이하의 차를 가지는 다이아몬드 묶음 윈도우를 만들어 정렬된 배열을 탐사. tail을 뒤로 옮길때마다.. 2020. 6. 2.