목록Problem Solving (19)
러닝머신 하는 K-공대생

20126번: 교수님의 기말고사 교수님이 시험을 시작할 수 있는 시각을 출력하여라. 시작 가능한 시각이 여러 개 있으면 그중 가장 앞선 시각을 출력한다. 시험을 치룰 수 없다면 -1을 출력하여라. www.acmicpc.net 일반적인 경우에 i번째 시험과 i+1번째 시험 사이에 끼어들려면 x(i+1) - (x(i)+y(i)) >= M 이어야 한다. 이때 i를 0부터 n-2까지 해야 0번째부터 시작해서 n-1번째 시험 사이로 끼어들 수 있다(문제에서는 1부터 카운팅하나 나는 0부터 세는게 편해서 이렇게 표현) 위 일반적인 경우를 제외하고는 가능한 경우가 0번째 시험이 시작하기 전에 시험을 진행하는 경우와 n-1번째(마지막) 시험이 끝난 후에 x(n-1)+y(n-1) + M = m: return (arr[i..

20127번: Y-수열 N개의 정수로 이루어진 수열 a1, ... , aN이 있다. 택희는 해당 수열이 증가수열 혹은 감소수열이 되게 만들고 싶다. 증가수열은 모든 i(1 ≤ i arr[i] 가 나올 때까지를 k를 1부터 증가시키고 arr[i-1] <..

11056번: 두 부분 문자열 첫째 줄에 문자열 A, 둘째 줄에 문자열 B가 주어진다. 두 문자열은 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 이 문제는 정말 모를때는 혼자 풀어보겠다고 몇시간을 투자하기 보다는 풀이를 찾아서 접근 방안과 새로운 이론이 필요하다면 그 이론을 공부할 필요가 있음을 알려주었다. 아직 기본적인 알고리즘과 자료구조에 대해 공부해야 할 점이 많다. 문제에서 원하는 부분 문자열은 subsequence(연속적이지는 않은 부분 문자열) 인데 나는 substring(연속적인 부분 문자열) 으로 잘못 이해해서 부분 문자열을 substring으로 생각한 경우에 다음과 같이 코드를 짰다. A = input() B = input() s,l = (A..

1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 뭔가 그리디 문제 같아서 처음에는 다음과 같이 접근했다. n = 42798, 고장난 버튼 = [1,3,5,6,7,9] 라고 했을 때 42까지는 그대로 사용하고 그 뒤가 800 혹은 488인 경우가 있을텐데 여기서 단순히 +,- 해서 누른 버튼의 수의 최소를 구하고자 하였다. 좀 복잡하게 구현하긴 했지만 문제에 있는 test case는 잘 작동했으나 제출해봤을 땐 실패했다. n = input() m = int(input()) broken_butto..