본문 바로가기
728x90
반응형

코딩/백준

알고리즘 - Python / 백준 - 11053번 : 가장 긴 증가하는 부분 수열 11053번: 가장 긴 증가하는 부분 수열 (acmicpc.net) 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 풀이 주어진 수열중 가장 길게 증가하는 수열을 찾는 문제이다. 주어지는 수열의 크기가 1000이 최대이기 때문에 전체를 순회해도 된다고 생각하고 문제를 풀었다. 각 dp 배열에 가장 긴 부분수열의 길이를 저장하고 이후 전체를 확인하며 업데이트 한다. dp 배열에서 가장 큰 수가 가장 긴 증가하는 부분수열의 길이 이므로 .. 더보기
알고리즘 - Python / 백준 - 15666번 : N과 M (12) 15666번: N과 M (12) (acmicpc.net) 15666번: N과 M (12) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 중복을 허용한 N개의 수를 입력받고 그 중에서 M개씩 고른 오름차순 중복조합을 사전순 증가로 출력하는 문제이다. 파이썬의 itertools 에서 combinations_with_replacement 을 import 하여 쉽게 중복조합을 구현 할 수 있다. 사전순 증가를 위해 입력받은 N개의 수를 sort 하고 중복조합을 만든다 이후 만들어진 중복조합들중 중복되는 것들을 제거하기 위해 set을 사용해.. 더보기
알고리즘 - Python / 백준 - 15663번 : N과 M (9) 15663번: N과 M (9) (acmicpc.net) 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 중복이 가능한 N가지 수를 입력 받고 , 그 중 M개를 뽑아 순열을 만들고 사전순으로 출력하면 되는 문제이다. 파이썬의 itertools 에서 permutations 을 import 하여 쉽게 순열을 구현 할 수 있다. 중복을 허용해 N가지 수를 입력받지만 , 중복된 순열을 여러번 출력하면 안되기 떄문에 파이썬에서 리스트의 중복을 제거하는 가장 간단한 방법인 set을 활용해 중복을 제거하고 sort를 .. 더보기
알고리즘 - Python / 백준 - 9465번 : 스티커 9465번: 스티커 (acmicpc.net) 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 풀이 2행 n열의 스티커를 떼어 얻을 수 있는 가장 높은 점수를 출력하는 문제다. 그리디 알고리즘 문제라고 생각하고 풀어보았지만 , 풀던 도중 패턴이 있는 것 같아 DP로 풀어보았다. 좌측부터 스티커를 선택한다고 가정할시 , 그 다음 두칸뒤의 2줄의 스티커들이 선택할 수 있는 스티커들은 2칸전의 대각으로 이어진 스티커 2개 혹은 한칸 전의 대각선쪽의 1개를 선택하는 경우이다. 이 두가지 중 큰 경우를 선택해.. 더보기
알고리즘 - Python / 백준 - 2407번 : 조합 2407번: 조합 (acmicpc.net) 2407번: 조합 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) www.acmicpc.net 풀이 nCm을 출력하는 조합 문제이다. 파스칼의 삼각형을 이용한 DP 알고리즘을 사용해 해결하였다. dp[n][m] ( nCm ) = dp[n-1][m-1] + dp[n-1][m] 으로 점화식을 두고 전체 dp를 구한 후 원하는 답을 출력하였다. import sys n , m = map(int, sys.stdin.readline().split(" ")) dp = [[0 for i in range(101)] for j in range(101)] for i in range(1,101): dp[i][0] = 1 dp[i][i] = 1 for.. 더보기
알고리즘 - Python / 백준 - 15654번 : N과 M (5) 15654번: N과 M (5) (acmicpc.net) 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 풀이 중복되지 않은 N가지 수를 입력 받고 , 그 중 M개를 뽑아 순열을 만들고 사전순으로 출력하면 되는 문제이다. 파이썬의 itertools 에서 permutations 을 import 하여 쉽게 순열을 구현 할 수 있다. 입력받은 N개의 수를 sort해 permutations 의 결과가 사전순으로 나올 수 있게 한다. import sys from itertools import permutation.. 더보기
알고리즘 - Python / 백준 - 15652번 : N과 M (4) 15652번: N과 M (4) (acmicpc.net) 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 1 ~ N 까지 수 중에서 M개씩 고른 오름차순 중복조합을 사전순 증가로 출력하는 문제이다. 파이썬의 itertools 에서 combinations_with_replacement 을 import 하여 쉽게 중복조합을 구현 할 수 있다. 파이썬의 combinations_with_replacement 으로 만든 조합들은 처음부터 사전순 증가와 오름차순으로 만들어지므로 출력만 하면 된다. import sys.. 더보기
알고리즘 - Python / 백준 - 15650번 : N과 M (2) 15650번: N과 M (2) (acmicpc.net) 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 1 ~ N 까지 수 중에서 중복없이 M개씩 고른 오름차순 조합을 사전순 증가로 출력하는 문제이다. 파이썬의 itertools 에서 combinations 을 import 하여 쉽게 조합을 구현 할 수 있다. 파이썬의 combinations 으로 만든 조합들은 처음부터 사전순 증가와 오름차순으로 만들어지므로 출력만 하면 된다. import sys from itertools import combinatio.. 더보기
반응형