[백준] 2234 - 성곽 Python
·
알고리즘/BFS
https://www.acmicpc.net/problem/2234 2234번: 성곽 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 N개의 정수로 벽에 대한 정보가 주어진다. 벽에 대한 정보는 한 정수로 주어지는데, 서쪽에 벽이 있을 때는 1을, 북쪽에 벽이 있을 때는 2를, www.acmicpc.net 성의 지도를 입력받아 성에 있는 방의 개수, 가장 넓은 방의 넓이, 하나의 벽을 제거하여 얻을 수 있는 가장 넓은 방의 크기를 구하는 문제다. 벽에 대한 정보는 0 ~ 15 사이 정수로 주어지는데, 서쪽에 벽이 있을 때는 1을, 북쪽에 벽이 있을 때는 2를, 동쪽에 벽이 있을 때는 4를, 남쪽에 벽이 있을 때는 8을 더한 값이 주어진다. 방의 개수와 가장 넓은 방의 넓이는 완전탐색, BFS ..
[백준] 2133 - 타일 채우기 Python
·
알고리즘/다이나믹 프로그래밍
https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구하는 문제다. 예시를 보자면 3x12 타일을 채우는 한 가지 경우는 위와 같을 수 있겠다. 먼저, 타일을 추가하기 위해 고유한 모양을 확인한다. 타일의 모양이 고유하지 않다면 추가하는 경우의 수가 중복되므로 고유한 경우만 타일을 추가해주어야 한다.- 3X2 타일의 경우 고유한 모양이 3개 존재한다. - 3X4 타일의 경우 고유한 모양이 2개 존재한다. - 3x6 타일의 경우 고유한 모양이 2개 존재한다. - 3x8, 3x10.. 의 경우..
[백준] 1253 - 좋다 Python
·
알고리즘/투 포인터
https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net N 개의 수 중 자기 자신이 아닌 다른 두 수의 합으로 나타낼 수 있는 수를 구하는 문제다. - 입력을 받은 N 개의 수를 정렬한다. (nlogn) - 투 포인터 알고리즘을 이용해 0 번째 인덱스부터 N-1 번째 인덱스까지 두 수를 조합해 현재 수를 만들 수 있는 경우를 완전탐색한다. - 한번 탐색한 숫자에 대해 다시 불필요한 탐색을 하지 않도록 각 숫자별로 해시테이블에 다른 두 수의 합으로 만들 수 있는지 1, -1 로 저..
[백준] 25214 - 크림 파스타 Python
·
알고리즘/다이나믹 프로그래밍
https://www.acmicpc.net/problem/25214 25214번: 크림 파스타 각 \(A_i\)가 추가된 직후의 문제의 답 \(N\)개를 공백으로 구분하여 출력한다. www.acmicpc.net 정수를 추가할 때마다 1 ≤ i ≤ j ≤ |A| ( |A| 는 배열 A 의 현재 길이) 를 만족하는 정수 i, j 에 대해 Aj - Ai 의 최대값을 구하는 문제다. 큰 요소가 작은 요소보다 오른쪽에 있어야 한다는 조건을 만족하는 범위 내에서 차이의 최대값을 구하는 문제라고 해석할 수 있다. 정수를 추가할 때마다 차이의 최대값을 구해야 한다. 현재 추가한 정수를 기준으로 나눈다면 다음과 같이 나타낼 수 있다. 차이의 최대값 = max(이전까지의 차이의 최대값,현재 추가한 정수를 최대 요소로 선택..