본문 바로가기
  • 시 쓰는 개발자

알고리즘/코테 스터디 (2022)13

11/14 스터디 9461 파도반 수열 DP문제의 핵심은 점화식 만들기인 것 같고 그걸 얼마나 그럴싸하게 만들어내느냐가 관건인듯하다. 이 문제는 점화식을 만들기 쉬워서 풀 수 있었다. 단순히 f(n) = f(n-1) + f(n-5)만 찾아내면 풀 수 있었는데 f(n)이 정말 여러 형태로 나올 수 있었기 때문에 어렵지않게 해결할 수 있었다. n = int(input()) tri = [0] * 101 # 여기 100으로 한거때문에 런타임에러 .... tri[1] = 1 tri[2] = 1 tri[3] = 1 tri[4] = 2 tri[5] = 2 for i in range(n): t = int(input()) for j in range(6, t+1): if tri[j] == 0: tri[j] = tri[j-1] + tri[j.. 2022. 11. 14.
11/09 스터디 1931 회의실 배정 정말 막막했던 문제였는데, key point는 2가지 정도였다고 본다. 1) 회의 시간이 짧은 게 중요 2) 회의가 끝나는 시간이 서로 같다면, 회의 시작 시간으로 정렬. 왜냐하면 1~2와 2~2도 가능하기 때문. 그래서 일단 회의 시작 시간으로 정렬하고, 끝나는 시간에 대해 한번 더 정렬을 하면 2번조건을 만족하면서 회의 시간이 짧은 게 위로 올라온다고 생각했다. 이를 lambda함수로 정렬했고 가장 위로 정렬된 회의를 일단 한다고 가정해 cnt를 1로 놓고 시작했다. 그래서 처음 회의가 끝나는 시간이 다음회의가 시작되는 시간보다 "작거나 같을 때" 회의를 할 수 있으므로 cnt를 1 늘려주고, 새로운 회의로 다시 비교를 하기 위해 end에 넣어주었다. 이를 반복한다. n = in.. 2022. 11. 9.
11/07 스터디 11047 동전 0 정렬을 하면 시간초과, 안하면 통과되는 문제였다. 그래서 오름차순으로 입력된다는 조건을 이용해서, money_list[n-i]로 입력받아서 내림차순으로 저장되게 하였다. 그렇게 하면 정렬할 필요가 없어서 통과할 수 있었다. 그 뒤로는 전형적인 동전 문제처럼, 5만원을 최대한 넣어보고(몫으로 반환), 그다음은 1만원, 다음 5천원 .... 을 계속 반복해서 동전의 개수를 세어서 반환하였다. import sys n, money, = map(int, input().split()) money_list = [0] * n for i in range(1, n+1): money_list[n-i] = int(sys.stdin.readline().strip()) cnt = 0 i = 0 while mo.. 2022. 11. 7.
11/02 스터디 10816 숫자카드2 핵심 Counter import sys from collections import Counter # 해당 원소들이 몇번 등장했는지 카운팅해서 dict로 반환 n = int(input()) # 숫자카드 n개 cardlist = list(map(int, sys.stdin.readline().strip().split())) m = int(input()) # 정수 m개 numlist = list(map(int, sys.stdin.readline().strip().split())) count = Counter(cardlist) for i in range(m): if numlist[i] in count: print(count[numlist[i]], end = ' ') else: print(0,.. 2022. 11. 7.