본문 바로가기
728x90

알고리즘/[python] 백준 BOJ328

[Python] 백준 3085 사탕게임 https://www.acmicpc.net/problem/3085 3085번: 사탕 게임 예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다. www.acmicpc.net 문제 해결 $N \times N$ 행렬을 만들어야 한다. 행별로, 열별로 각각 옆에 있는 사탕의 색깔이 다르다는 조건하에 서로 바꾼다음 같은 색으로 이어진 가장 긴 행 또는 가장 긴 열을 찾는다. 찾은다음 다시 사탕의 위치를 원위치 시킨다. 위의 사고를 가지고 코드를 짜면 O($N^4$)가 나온다.... 그러나 N이 작다는 것때문에 큰 문제가 되지 않는다. brute force(부루트 포스)알고리즘으로 분리되어 있는 것 보면 가능하다는 뜻.. CODE import sys input = sys.stdin.readli.. 2022. 12. 31.
[Python] 백준 2309 일곱 난쟁이 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 해결 리스트 안에 두 개의 원소를 빼는 방법을 선택 뺄 두 개원 원소 인덱스중 작은 인덱스를 start, 큰 인덱스를 end로 잡고 하려고 함. 알고 있는 지식이 전체 수의 합이므로 리스트를 sort 시킨 후 start, end 포인트 이동이 편할 것 같다. 시간 복잡도면에서 더 효율적인 것이 있을 것 같지가 않았다. (Brute force algorithm) CODE import sys input .. 2022. 12. 30.
[python] 백준 11055 가장 큰 증가 부분 수열 https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 문제 해결 전통적인 dp문제 dp[n]을 n을 마지막으로 포함하는 부분 증가 수열중 합이 가장 큰 수를 나타낸다고 하자. 이 때 들어가는 수열중 n 이전 마지막 수를 i라 할 때 dp[n] = max(dp[i]+A[n], dp[n])이 될 것이다. 따라서 이 것을 생각하고 풀면 끝 CODE import sys input = sys.stdi.. 2022. 12. 29.
[python] 백준 11722 가장 긴 감소하는 부분 수열 https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net 문제 해결 수열에서 부분 수열 중 감소 수열이 되도록 뽑았을 때 가장 긴 수열을 찾는 문제 n번째 수는 뽑힐 수도 있고 안 뽑힐 수도 있음 n번째 수가 뽑힌다고 가정할 때 n-1번까지 수열중 가장 긴 수열에 +1이 되는 것이며 마지막 수보다 n번째 수가 작아야한다. n번째 수를 넣었을 때 가장 긴 수열을 dp[n]이라고 하.. 2022. 12. 29.
728x90