본문 바로가기

algorithm/acmicpc16

[백준] 2688 숫자고르기 문제 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 찾는 프로그램을 작성하시오. 예를 들어, N=7인 경우 아래와 같이 표가 주어졌다고 하자. 그림 이 경우에는 첫째 줄에서 1, 3, 5를 뽑는 것이 답이다. 첫째 줄의 1, 3, 5밑에는 각각 3, 1, 5가 있으며 두 집합은 일치한다. 이때 집합의 크기는 3이다. 만약 첫째 줄에서 1과 3을 뽑으면, 이들.. 2020. 7. 10.
[백준] Num1475 방 번호 문제 다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다. 입력 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 필요한 세트의 개수를 출력한다. 예제 입력 1 9999 예제 출력 1 2 다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)문제풀이 있는 그대로 풀음. 아래 주석 참고. 시간 복잡도 O(n) 왜 문제를 풀지 못했는가? 어떤 부분을 생각하지 못했는가? Source 2020. 7. 10.
[백준] 1912 연속합 문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 입력 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. 출력 첫째 줄에 답을 출력한다. 예제 입력 1 10 10 -4 3 1 5 6 -35 12 21 -1 예제 출력 1 33문제풀이 brute-force 를 풀었을 때, O(n .. 2020. 7. 10.
[백준] 9249 최장 공통 부분 문자 문제 https://www.acmicpc.net/problem/9249 문제 풀이 마지막 끝자리를 확인한다. 마지막 끝자리가 같으면 각각의 문자열의 이전 문자가 같은지 확인한다. 위에 1,2 번을 반복한다. 반복하면서 동적 계획법을 사용하여 caching 을 한다. 캐싱할 때, 문자열을 저장한다. 아래와 같이 풀면 메모리 초과로 틀림. 메모리 줄일려고 생각해봤는데 아예 방법을 바꿔야할 것 같음. 시간복잡도, 공간복잡도 시간복잡도 : O(n제곱) - for 2번 돌아감. 공간복잡도 : O(n제곱) - caching 이 2차원배열이기에 source 2020. 7. 10.