/images/logo.png

[백준]4198 열차정렬

https://www.acmicpc.net/problem/4198 풀이: 가장 긴 증가하는 부분수열 문제와 비슷하게 풀 수 있다. 가장 긴 증가하는 부분 수열 5 참고 1 ~ N 까지의 모든 차량을 살펴보면서 진행한다. 현재 차량이 i 일 때, i번째 차량을 기준으로 생각한다. i+1 ~ N 까지의 차량 중 i 번째 차량을 시작점으로 가장 긴 증가하는 부분수열의 길이를 구하고, 반대로 가장 긴 감소하는 부분수열의 길이를 구한다. 두 부분수열의 길이를 합한 값 중 가장 큰 값을 찾는다. 코드: 사용언어 : python

[백준]11003 최솟값 찾기

https://www.acmicpc.net/problem/11003 풀이: dequeue를 사용하는 문제이다. 간단하게 풀 수 있다. 0 번째 숫자부터 N번째 숫자까지 진행한다. 현재 위치가 i일 때, 큐에 마지막에 들어있는 값이 현재 위치의 값보다 크다면, pop한다. 이 것을 현재 위치의 값이 더 클 때까지 반복한다. 즉, 큐의 마지막 값이 현재 값보다 작은 값이 나올때까지 반복하게 된다. 큐의 마지막 값이 현재 값보다 작거나, 큐가 비어있다면, 큐에 마지막에 현재 값을 push해준다. 맨 앞이 가장 작은 값이기에 맨 앞의 값을 출력해줄 것이나, 맨 앞에 값이 i-L+1 ~ i 사이에 오는 값인지 확인하는 작업이 필요하다.

[백준]2568 전깃줄 - 2

https://www.acmicpc.net/problem/2568 풀이: 가장 긴 증가하는 부분수열 문제이다. B번 전깃줄의 위치를 A번 전깃줄의 위치를 기준으로 정렬한 뒤, B를 기준으로 가장 긴 증가하는 부분수열을 찾으면 되는 문제이다. 예를들어 예시에서 A 1 2 3 4 6 7 9 10 B 8 2 9 1 4 6 7 10 위와 같이 정렬된다. 이렇게 정렬 되었을 때, B를 기준으로 가장 긴 증가하는 부분수열은 1, 4, 6, 7, 10 이 되고 남은 8, 2, 9 에 대응되는 A값은 1, 2, 3 3개이다.

[백준]14003 가장 긴 증가하는 부분 수열 5

https://www.acmicpc.net/problem/14003 풀이: 가장 긴 증가하는 부분 수열을 구하는 문제이다. 수열의 0 ~ N 번째 까지 숫자들 중 가장 길게 증가하는 부분 수열을 만들면 된다. 배열을 하나 만든 후 수열의 숫자를 배열에 하나 씩 넣는다. 넣을 때에는 규칙이 있는데, 현재 숫자가 배열의 맨 오른쪽의 숫자보다 크다면, 가장 오른쪽에 추가해 주고, 만약 배열의 숫자 중 현재 숫자가 더 작은 숫자가 있다면, 현재 숫자로 교채해 준다. 이렇게 된다면, 배열은 자동적으로 정렬되게 되고, 최종적으로 만들어진 배열의 크기가 가장 긴 증가하는 부분 수열의 길이가 된다.

[백준]11000 강의실 배정

https://www.acmicpc.net/problem/11000 풀이: 그리디 문제이다. 강의 시간을 시작 시간 기준으로 정렬해 놓는다. 맨 처음 우선순위 큐에 0을 넣어놓는다. 강의 시작 시간이 제일 적은 것부터 우선순위 큐의 맨 앞의 값과 비교한다. 만약, 강의 시작 시간이 큐의 맨 앞의 값보다 크다면, 큐에서 pop해준다. 강의 끝나는 시간을 우선순위 큐에 pop 해준다. 이렇게 되면, 만약, 강의를 연달아 할 수 있다면, 강의실 개수(큐의 크기)는 유지되고, 연달아 할 수 없다면, 강의실 개수는 늘어나게 된다. 마지막으로 강의실 개수를 출력하고 끝낸다.