본문 바로가기

Algorithm175

11049. 행렬 곱셈 순서 (Python) 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 풀이 2차원 dp를 활용하여 구할 수 있다. 2차원 dp는 다음을 의미한다. 위의 예제는 dp[2][5]를 구하는 과정 중 하나의 예를 나타낸다. dp[2][5]를 구하기 위해서는 다음과 같은 경우를 모두 탐색해야 한다. dp[2][2] + dp[3][5] + 곱셈 연산 dp[2][3] + dp[4][5] + 곱셈 연산 dp[2][4] + dp[5][5] + 곱셈 연산 이 중 최솟값이 dp[2][5]에 기록된다. 이를 구하는 점화식은 다음과 같다. f.. 2022. 2. 23.
2631. 줄세우기 (Python) 2631번: 줄세우기 KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 www.acmicpc.net 풀이 LIS(Longest Increasing Subsequence, 최장 증가 부분 수열)을 활용하여 해결할 수 있는 문제이다. 입력으로 주어진 아이들 중에서 LIS의 길이를 찾은 후 이에 해당하지 않는 나머지 아이들을 옮기면 위치를 옮기는 아이들의 수를 최소로 할 수 있다. 예제를 보면 다음과 같다. 해당 리스트에서 LIS는 {3, 5, 6}에 해당하고 길이는 3이다. 이 3명을 제외한 나머지 7, 2, 1, 4번의 아이들을 옮기면 최소한의 이동으로 번호 순서대로 .. 2022. 2. 23.
2212. 센서 (Python) 2212번: 센서 첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있 www.acmicpc.net 풀이 먼저 입력 받은 센서의 좌표들을 오름차순으로 정렬한다. 그리고나서 각 센서들간의 거리를 구해서 새로운 리스트에 담는다. 예를 들어 예제의 입력에서 1, 6, 9, 3, 6, 7을 1, 3, 6, 6, 7, 9로 정렬한다. 그 후 각각의 거리를 구하면 다음과 같다. 이렇게 구한 거리를 내림차순으로 정렬하면 3, 2, 2, 1, 0이 된다. 이제 앞에서부터 집중국의 개수(K) - 1만큼을 버리면 된다. 가장 멀리 떨어져 있는 센서끼리는.. 2022. 2. 23.
17144. 미세먼지 안녕 (Python) 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 풀이 단순한 구현 문제로 문제에서 주어진 순서대로 코드를 작성하면 된다. 미세먼지가 확산하는 과정을 diffuse() 함수로 만들었고 공기청정기가 작동하는 과정을 cleanAir() 함수로 만들었다. 미세먼지가 있는 좌표를 담아두는 리스트를 만들어서 (행, 열, 미세먼지 수치)와 같은 형태의 튜플로 담아두었다. 이 리스트를 통해서 diffuse() 함수에서 미세먼지를 확산시킨다. cleanAir()에서는 공기청정기가 작동하는 반대방향 순으로 for문을 통해서 각.. 2022. 2. 19.
13975. 파일 합치기 3 (Python) 13975번: 파일 합치기 3 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데, www.acmicpc.net 풀이 파일들을 하나의 파일로 합칠 때의 비용을 계산하기 위한 연산의 횟수는 K-1번이다. 이 때, 최소비용을 구하기 위해서는 각 연산마다 파일 중 제일 작은 값들을 사용해야 다음 연산에 사용할 값을 작은 값으로 만들 수 있다. 최소 힙을 사용하여 두 개의 파일을 선택할 때 현재 파일 목록 중 가장 작은 값을 꺼내오도록 한다. 두 값을 합친 후 다시 최소 힙에 넣어주는 과정을 K-1번 반복한다. 코드 import heapq def solution(nums): a.. 2022. 2. 18.
1300. K번째 수 (Swift, Python) 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 풀이 이분탐색을 활용해서 해결할 수 있다. B 배열에서 K번째에 있는 수의 범위는 1 이상 K 이하의 수이다. left를 1로 잡고 right를 K로 잡아서 이분 탐색을 진행하면 된다. mid를 구해서 해당 mid 이하인 원소 개수가 A 배열에서 몇 개인지를 구하면 된다. 예를 들어 현재 mid가 13이고 N이 4라고 가정해보자. A 배열에 13 이하인 원소의 개수는 1부터 N(4에 해당)까지 for문을 통해 구할 수 있다. 1행에.. 2022. 2. 14.