본문 바로가기

취준/백준

[백준][Python][14889][브루트포스] 스타트와 링크 문제 : https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 브루트 포스 문제다. 모든 팀 조합을 구하고, 그 조합들에서 차이가 가장 안나는 조합으로 최솟값을 구한다. 문제의 N이 작으므로 조합을 통해 다 구해보자. for c in combinations(orig,n//2) 은 0~n-1 까지의 모든 숫자를 반으로 나눈다. 그 다음 각각 나눠진 팀을 c, news 라 한다. 이는 Set 연산으로 구할 수 있다. 그 후 각각의 c에 대해 score연산을 통해 최솟값을 구.. 더보기
[백준][Python][11053][DP]가장 긴 증가하는 부분 수열 문제 : https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net DP 문제 중에 유명한 문제다. Longest Increasing Subsequence LIS라는 문제다. 이 문제는 DP로 풀면 O(n^2) 가 나오고, binary search 등을 이용하면 O(nlogn)까지 줄일 수 있다고 한다. 물론 난 안줄인다. ㅎㅎ dp 배열을 만들고, 다음과 .. 더보기
[백준][Python][10815][이분탐색] 숫자 카드 문제 : https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 www.acmicpc.net 이분탐색 문제다. list.count() 는 O(N) 이므로, count 를 사용할 경우 O(N^2) 가 되어 시간초과가 .. 더보기
[백준][Python][10816][이분탐색] 숫자 카드 2 문제 : https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이수도 -10,00 www.acmicpc.net 이분 탐색 문제다. list.index()는 O(N) 이므로, count를 사용할 경우 O(N^2)가 되어 시간 초과가.. 더보기
[백준][Python][1931][그리디] 회의실배정 문제 : https://www.acmicpc.net/problem/1931 1931번: 회의실배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 회의실/강의실/화장실 배정같은 이런 문제는 유명하고, 코테에도 나오고 하는 문제다. 이런 문제는 끝나는 시간을 기준으로 정렬하라고만 알고있는데 왜 그런지 알아보자 1. 회의가 짧은 순서대로 배정하면? |--------1------| |--------2-------| |----3----| 이런 순서가 나올 수 있으니까 안된다 2. 회의가 긴 순서대로 배정하면...은 의미없다 3. 회의가 일찍 시작하는 순으로 배정하면? |-1-| |-2-| |----3--| |---------------4-----------.. 더보기
[백준][Python][1780][분할정복] 종이의 개수 문제 : https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 9개의 종이로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으 www.acmicpc.net 분할정복 문제다. 종이를 -1,0,1로 나눴으니 +1 을 하면 리스트의 인덱스로 쓸수 있겠다 싶었다. 이 문제는 두개의 함수.. 더보기
[백준][Python][17144][시뮬레이션] 미세먼지 안녕! 문제 : https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 왼쪽 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼 www.acmicpc.net 이 문제는 진짜 하라는 대로 하면된다. 내가 착각해서 고생했던 이유를 적는다. 미세먼지 확산 -> 공기청정기 작동 순.. 더보기
[백준][Python][12865][DP]평범한 배낭 문제 : https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)가 주어진다. 입력으로 주어지는 모든 수는 정수이다. www.acmicpc.net 0-1 Knapsack 문제다. 이 문제는 진짜 기본중에 기본이고 다른 DP는 잘만풀면서 맨날 이것만 나오면 틀리길래 각잡고 푼다. 0-1 Knapsack 문제는 가방 무게 K 한도 내에서 최대한 비싼 물건들을 챙겨나오는 문제다. 중요한 점은 다음과 같다. DP [물건 1.. 더보기