[문제] https://www.acmicpc.net/problem/2143 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net [풀이] A에서 가능한 부분합을 모두 구하고 B에서 가능한 부분합을 모두 구한다. A의 부분합이 저장된 배열을 sum_a라고 하고, B의 부분합이 저장된 배열을 sum_b라고 했을 때, sum_a[i] = T - sum_b[j] 를 만족하는 i와 j값을 찾아야 한다. 단순하게 찾으면 메모리 초과 또는 시간 초..
[문제] https://www.acmicpc.net/problem/10021 10021번: Watering the Fields Input Details There are 3 fields, at locations (0,2), (5,0), and (4,3). The contractor will only install pipes of cost at least 11. Output Details FJ cannot build a pipe between the fields at (4,3) and (5,0), since its cost would be only 10. He therefore b www.acmicpc.net [풀이] 시간 제한과 메모리 제한이 상당히 빡빡한 문제였다. 문제를 처음 보았을 때, 입력으로 받..
[문제] https://www.acmicpc.net/problem/2179 2179번: 비슷한 단어 첫째 줄에 S를, 둘째 줄에 T를 출력한다. 단, 이 두 단어는 서로 달라야 한다. 즉, 가장 비슷한 두 단어를 구할 때 같은 단어는 제외하는 것이다. www.acmicpc.net [풀이] 가장 비슷한 단어들은 인접한 단어들이기 때문에, 문자열을 정렬을 한다. 인접한 단어들을 비교하면서 비슷한 부분의 길이가 최대라면, 해당 문자를 저장을 한다. 저장을 하는 이유는 가장 긴 단어가 여러개일 수도 있기 떄문이다. 만약 입력이 noon,noone,koon,koone가 들어오게 되면 noon과 koon이 4글자로 가장 긴 단어가 되기 때문에 여러 개가 될 수 있다. 이렇게 가장 긴 단어가 저장된 배열을 정렬되지 ..
[문제] https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net [풀이] MST 구하는 방법. 아래 참조 https://shino72.tistory.com/entry/%EC%B5%9C%EC%86%8C-%EC%8B%A0%EC%9E%A5-%ED%8A%B8%EB%A6%AC MST - 최소 신장 트리 MST Spanning Tree 그래프 내의 모든 정점을 포함하는 트리이다. Minimum Spanning Tre..
[문제] https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net [풀이] 그냥 단순하게 행렬을 N번 곱하면 시간초과가 난다 (B의 값이 최대 100,000,000,000이기 때문) 그렇기에 제귀를 통해 풀었다. 지수 법칙 - 거듭제곱의 곱 을 이용하면 간단하다 2의 5승은 2의 2승과 2의 2승그리고 2의 1승을 곱한것과 같다. fun mul(arr : Array, N : Long) : Array { if(N == 1L) return arr val tmp = mul..
fun main() { var br = BufferedReader(InputStreamReader(System.`in`)) var bw = BufferedWriter(OutputStreamWriter(System.out)) var s = br.readLine().toString() e = br.readLine().toString() while(true){ val tmp = s s = s.split(e).joinToString("") if(tmp == s) break } if(s == "") bw.write("FRULA") else bw.write(s) bw.flush() bw.close() } [문제] https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 ..