[BOJ 14889] 스타트와 링크
·
Coding Test/Problem Solving
14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 1. 문제 설명 2. 구현 아이디어 1 - 맞았습니다!! 조합을 활용하여 문제를 풀었다. 문제를 푼 자세한 로직은 아래와 같다. 1. 조합을 사용해서 N/2개의 수를 고른다. 해당 수를 start 팀에 배정한다. 2. 반복문으로 N/2개의 수를 고른 경우의 수마다 3번부터 6번 과정을 수행한다. 3. 0 ~ N-1 중 start 팀에 배정되지 않은 수는 link 팀에 배정한다. 4. 조합을 사용해서 0 ~ N/2 중 2개의 수(i, j)를 고른다. 해당 수는 인덱스를 의미하게 된다. ..
[BOJ 14500] 테트로미노
·
Coding Test/Problem Solving
14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 1. 문제 설명 2. 구현 아이디어 1 - 시간초과 한 좌표를 기준으로 테트로미노를 종이 위에 하나 놓는 모든 경우의 수는 해당 좌표를 기준으로 3칸 이동하는 모든 경우의 수와 동일하다. 그러므로 이중 반복문을 사용하여 모든 좌표에 대해 DFS+백트래킹으로 3칸을 이동했을 때 수들의 합을 구한 뒤 최댓값을 구하면 된다. 하지만 여기까지만 구현한다면 예제 입력 3에서 틀릴 것이다. 왜냐하면 T 모양 테트로미노는 3칸 이동하는 것으로 구현하는 것이 불가능하기 때문이다..
[BOJ 14888] 연산자 끼워넣기
·
Coding Test/Problem Solving
1. 문제 설명 2. 구현 아이디어 1 - 틀렸습니다 가장 먼저 생각난 풀이는 순열로 가능한 식을 모두 구한 후, 최댓값과 최솟값을 갱신하는 것이였다. 연산자는 최대 N-1(=10)개가 있고, 10! = 3628800이므로 시간 제한도 넉넉하다. 코드 로직은 아래와 같다. 1. next_permutation으로 순열을 구한다 2. 순열로 구한 연산자 순서에 따라 식의 결과를 갱신한다 - ret = v[0] - 반복문을 돌면서 ... ret = ret (연산자) v[i+1] 3. ret과 mx, mn(최댓값과 최솟값을 담는 변수)를 비교하여 최댓값과 최솟값을 갱신한다 #include using namespace std; #define INF 987654321 int calculate(int a, int b..
[BOJ 16236] 아기 상어
·
Coding Test/Problem Solving
1. 문제 설명 조건: 더 이상 먹을 수 있는 물고기가 공간에 없다면 엄마 상어에게 도움을 요청한다 요구사항: 몇 초동안 엄마 상어에게 도움을 요청하지 않고 물고기를 잡아먹을 수 있는가? 이 두 문장을 합하면 더 이상 먹을 수 있는 물고기가 없을 때까지 걸리는 시간을 구해야 한다는 것을 알 수 있다. 물고기를 먹는 조건을 다시 정리하면 아래와 같다. 물고기의 크기가 아기 상어의 크기보다 작아야 한다. 거리가 가까운 순 > X 좌표가 작은 순 > Y 좌표가 작은 순 X = 행, Y = 열 2. 구현 아이디어 1 - 틀렸습니다 이번 문제는 BFS + 빡구현 유형이다. 주어진 조건이 다소 많은데, 해당 조건들을 충족하도록 차근차근 꼼꼼하게 구현하면 풀 수 있다. 아기 상어와 관련된 변수는 걸린 시간, 상어의 ..
[BOJ 2357] 최솟값과 최댓값
·
Coding Test/Problem Solving
2357번: 최솟값과 최댓값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100 www.acmicpc.net 1. 문제 설명 예를 들어 1번~10번 정수는 연두색 박스의 범위이고 최솟값은 5, 최댓값은 100이다. 또 다른 예로, 8번~10번 정수는 주황색 박스의 범위이고 최솟값은 5, 최댓값은 81이다. 2. 구현 아이디어 1 - 맞았습니다!! Segment Tree를 사용하면 쉽게 풀 수 있는 문제이다. (대부분의 세그먼트 트리 문제가 세그먼트 트리를 구현만 하면 쉽게 풀리는 것 같다) [C++] 세그먼트 트리의 개념과 구현 ..
[BOJ 11066] 파일 합치기
·
Coding Test/Problem Solving
11066번: 파일 합치기 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본 www.acmicpc.net 1. 문제 설명 2. 구현 아이디어 1 - 맞았습니다!! 처음에는 빡구현 문제라고 생각하여 규칙을 찾아내고자 애를 썼지만 잘 되지 않았다 😥 결국 다른 사람의 코드를 참고하였고, DP로 풀어야 하는 문제임을 알 수 있었다. DP 배열은 2차원 배열로, DP[i][j]는 i번째부터 j번째 파일을 합치는데 필요한 최소 비용을 의미한다. 파일을 합치기 전에는 특정 지점을 기준으로 파일이 나누어져있을 것이다. (like 분할정복에서 합치기 전에 나뉘었던 것처럼 ..
짱정연
'Coding Test' 카테고리의 글 목록 (3 Page)