알고리즘
-
[BOJ]16235번 나무 제태크알고리즘/BOJ 2020. 8. 16. 03:39
https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 아이디어 1, 나무의 정보를 deque로써 관리를 하고 나이가 적은 나무 쿠터 검사를 진행하기 때문에 나이 순으로 오름차순 정렬을 해 준다. 2, 봄 부분에서 나무가 양분을 먹어 살아남는지에 대한 유무와 나이를 먹고 5의 배수가 됐는지 확인하여 각각의 벡터 배열로써 관리를 해 준다.(여름 가을 부분에서 사용) 이 이외에 살아남은 나무는 따로 다시 원래의 나무 deque에 저장하여 ..
-
[BOJ]16236번 아기 상어알고리즘/BOJ 2020. 8. 16. 02:21
https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가�� www.acmicpc.net 아이디어 1, bfs방식으로 아기 상어의 위치를 시작으로 지도를 순회한다. 2, 한 번씩 움직일 때마다 아기 상어가 물고기를 먹었는지 판별 - 2개의 큐로 관리 - 큐 하나는 움직이기 전 상태, 다른 하나는 움직인 후의 상태를 저장하여 물고기를 먹었는지 판별 - 움직인 후의 큐에 대하여 먹을 수 있는 물고기의 위치에 도달하였을 시 벡터에 저장을 하고 문제 조건에 따라 맨 위 오른쪽인 위..
-
[BOJ]16234번 인구 이동알고리즘/BOJ 2020. 8. 14. 17:07
https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모�� www.acmicpc.net 아이디어 1, map에 현제 구역인 인구의 수를 저장을 하고 bfs방법으로 group을 지어준다. 2, 매 턴마다 그룹이 지어진 나라들을 벡터로 관리를 하고 인구 수를 갱신한다. #include #include #include #include #include using namespace std; typedef struct country { int r; int c; int unit..
-
[BOJ] 17837번 새로운 게임2알고리즘/BOJ 2020. 8. 4. 02:27
https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하� www.acmicpc.net 아이디어 1, 문제의 조건에 따라서 시뮬레이션을 만들어 주웠다. 2, 시뮬레이션을 생성할 때 처리의 과정을 2 분류로 나누었다. 1) 위치를 이동시켰을 때 파란색 범위인지, 판을 벗어났는지의 여부를 먼저 판단하고 만약 그러한 상황이 되었다면 1차적으로 처리를 해 줌(방향을 반대로) 2) 첫 번째 처리과정을 거친 후 범위를 벗어난 경우/파란색 부분, 빨간색 부분, 흰색 부분에 따라 조건에 맞게..
-
[BOJ] 17140번 이차원 배열과 연산알고리즘/BOJ 2020. 7. 31. 19:14
https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 아이디어 1, 행 정렬과 열 정렬을 함수를 구분하여 동작하게 해 준다. 2, 행 혹은 열을 정렬할 때 각각의 숫자와 등장 횟수를 담는 구조체를 선언을 한 다음 벡터에 저장을 해 준다. 3, compare함수를 통하여 문제의 조건인 "등장 횟수가 커지는 식으로, 그 수가 같다면 수가 커지는 순으로" 벡터에 있는 구조체를 정렬한다. 4, 행 혹은 열을 위와 같은 방식으로 연산을 진행하고 ..
-
[BOJ] 15684번 사다리 조작알고리즘/BOJ 2020. 7. 31. 16:38
https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 처음에는 단순한 dfs방법으로 풀릴 줄 알았지만 시간 초과로 인하여 오래 걸렸던 문제이다. 문제의 핵심 조건 1, 가로선이 연속적으로 일직선이 될 수는 없다. 2, 가로선이 겹치는 경우는 존재하지 않는다. 3, 정답이 3보다 크면 -1을 출력한다. 아이디어 1, dfs방식으로 다리를 놓을 수 있는 경우의 수를 탐색한다. 2, 문제의 조건에서 "정답이 3보다 크면 -1을 출력한다."는 조건으로 인..
-
[BOJ] 15683번 감시알고리즘/BOJ 2020. 7. 30. 20:51
https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감�� www.acmicpc.net 아이디어 1, 위, 아래, 왼쪽, 오른쪽을 감시 할 때의 기능을 하는 함수를 각각 구현 2, cctv의 종류에 따라 감시할 수 있는 방향의 모든 경우를 고려하여 dfs를 구현 3, 단, 이때 주의할 점은 dfs를 구현 할 때 이전 상태로 되돌릴 때, 해당 cctv가 감시를 했던 곳만 이전 상태로 되돌려야 한다. 즉, 감시가 겹쳐있는 곳이 있기 때문에 구분을 잘 해 주워야 한다. #i..
-
[BOJ] 14891번 톱니바퀴알고리즘/BOJ 2020. 7. 30. 20:41
https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 아이디어 1, 각각의 톱니의 상태를 deque로 저장을 한 다음 시계방향과 반시계 방향으로 돌았을 때의 기능을 하는 함수 구현 2, 한번의 회전이 진행이 되고 새롭게 각각의 톱니들이 맞물려 있는 상태를 갱신하는 함수 구현(다음번 회전을 할 때 회전에 대한 유무를 조사) 3, 조건에 맞게 시뮬레이션을 진행 #include #include #include #include #include #incl..