전체 글 29

BOJ 14889 스타트와 링크

www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 해결 전략 이 문제는 n(짝수)명에서 2/n개를 고르고 이를 스타트 팀과 링크 팀으로 나눠 점수를 구하는 방식이다. 조합 방식으로 n/2개를 선택한 후에 각각 vector에 넣고, 이를 나누어 점수를 계산하였다. 소스 #include #include #include using namespace std; #define MAX 20 #define endl "\n" int n; int map[MAX][MAX]; bool check[..

BOJ 16234 인구 이동

www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모�� www.acmicpc.net 문제 해결 전략 인구 이동을 할 때, check 배열로 이미 이동이 됐는지 체크하였다. 한 부분에서 인구 이동이 발생하면, 바로 sum과 cnt를 이용하여 평균값으로 대입해주었다. 이렇게 하지 않으면 한 구역(다수의 땅)에 다른 구역(다수의 땅)이 겹칠 수 있기 때문에 원치 않는 인구 이동이 발생할 수 있다. 소스 #include #include #include #include using na..

BOJ 17143 낚시왕

www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 문제 해결 전략 상어 먹기 -> 상어 이동 -> 겹치는 상어 처리 2차원 배열 대신 vector를 이용하여 vector map[MAX][MAX];를 활용하였다. 겹치는 상어가 있을 때, sort()나 clear()를 활용하면 편하기 때문이다. 상어의 움직임을 다 구현해줘서 시간 초과가 발생하였는데, 상어의 speed가 클 때, 나머지 연산 처리를 하여 시간 초과를 방지하였다. 소스 #incl..

BOJ 19238 스타트 택시

www.acmicpc.net/problem/19238 문제 해결 전략 택시 위치에서 큐 돌리면서 사람을 찾는다. 사람을 찾으면 우선순위 큐에 넣는다. 우선순위 큐에 넣는 이유는 사람들을 다 찾고, 그 중에 조건에 가장 적합한 원소만 뽑아주기 때문이다. 또한, 택시 위치가 사람의 위치와 같이 시작하는 경우, 다른 사람의 위치가 또 다른 사람의 목적지에 위치하는 경우 등을 고려하여 문제를 풀어야 한다. 소스 소스는 위에서 설명하지 못한 부분을 최대한 코드 위에 주석 처리 하였다. #include #include #include #include #include using namespace std; #define endl "\n" #define MAX 21 const int dy[] = {-1, 1, 0, 0}..

BOJ 17142 연구소 3

문제 해결 전략 기존 연구소 문제에서 비활성화된 바이러스 조건이 추가된 문제이다. 기존 연구소 문제와 같이 dfs(조합)을 통해 바이러스 m개를 선별하고 bfs를 통해 바이러스 탐색 후, 최소 시간을 구한다. 문제에서 주의해야 하는 조건은 비활성화된 바이러스이다. 비활성화된 바이러스를 제외하고 time을 구하는 것이 아닌 비활성화된 바이러스 또한 time에 포함시켜야 한다는 것이다. 예를 들어, map이 아래와 같다면 2 2 2 0 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 2 2 0 1 정답은 0 0 0 1 - 0 - - - - 0 - - - - 0 - - - - 0 0 0 1 - 이 아닌 아래와 같다. 2 3 4 5 - 1 - - - - 0 - - - - 1 - - - - 2 3 4..

BOJ 17822 원판 돌리기

www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 문제 해결 전략 이 문제는 시뮬레이션 문제이다. 원판 돌리기 -> 네 방향 탐색을 통해 인접한 같은 수 삭제 (첫 번째 열과 마지막 열은 따로 처리) -> 인접한 같은 수가 없을 시 (sw == false) 평균값을 구해 +1, -1 처리 -> 원판 수 총합 구하기 temp를 선언한 이유 : 2중 배열을 통해 map의 한 원소마다 검사를 통해 map의 원소를 삭제한다면, 나중에 삭제되어야 할 원..