[Python 3] BOJ 17452 Christmalo.win
문자열들의 앞과 뒤를 잘라서, 같은 알파벳이 있으면 서로 연결시킬 수 있다.이 때, 자르는 알파벳들의 수가 최소가 되게끔 해야한다. 따라서, christma(s), (h)alloween을 통해 각각 s와 h를 지우면 연결을 할 수 있는 셈이다. 여기서 두 개의 문자열을 보고 하나하나 비교를 하게 되면, 10만개 중에 두개를 고르는, 10만 C 2 개의 연산을 해야하고, 이는 무조건적으로 TLE를 받게 된다. 문제의 포인트는 결국 '알파벳'을 기준으로 연결한다는 점이다.a부터 z까지의 알파벳이 왼쪽에서 언제 제일 빨리 나오는지, 오른쪽에서 언제 제일 빨리 나오는지를 저장한다. (left,right)각 string을 돌면서, string에서 a부터 z까지 각 알파벳이 왼쪽에서 언제 제일 빨리 나오는지, 오른..
[Python 3] BOJ 15991: 1, 2, 3 더하기 6
https://www.acmicpc.net/problem/15991 일반적인 DP 문제이다.두 개의 list를 정의하였는데, dp[n]는 1,2,3의 합으로 n을 만들 수 있는 모든 경우의 수를 정의하고, answer[n]은 대칭적으로 n을 만들 수 있는 경우의 수, 즉 문제의 정답을 의미한다.예를 들어,1 -> dp[1]= 11+1 , 2 -> dp[2]= 21+1+1, 1+2, 2+1, 3 -> dp[3]=4 와 같이 정의되고, 1 -> answer[1]= 11+1, 2 -> answer[2] =21+1+1, 3 -> answer[3] =21+1+1+1, 2+2, 1+2+1 -> answer[4]=3 와 같이 정의된다. 여기서, dp[i]의 값은 dp[i-1], 1 의 조합, dp[i-2], 2 의..