본문 바로가기
[백준][파이썬] #10870 피보나치수 5 (재귀함수 활용) [핵심] 다른 방법으로도 더 간단하게 구할 수 있다. 하지만, 재귀함수를 연습하기 위하여 재귀함수로 코드를 작성했다. 재귀함수 코드를 짤때 중요한점은 특정 변수가 되었을 때 재귀함수가 멈추고 출력 혹은 다른 실행이 되어야 하는것이다. While문과의 비슷한점이 조금은 있는것 같다. 쉬운 예제로 재귀함수를 푸는 연습을 해야 나중에 어려운문제를 재귀함수로 쉽게 풀 수 있을것같다. num = int(input()) lit = [0,1] def recur(time,index): cnt = index number = lit[-1]+lit[-2] lit.append(number) if time-2 == cnt: print(lit[-1]) else: recur(num,cnt+1) if num == 0: print(0.. 2020. 3. 10.
[백준] #15650 N과 M(2) [핵심] 메모리를 생각하는 것이 핵심이다. 내장된 모듈을 활용하여 순열이나 조합을 리스트에 저장하면 대부분의 경우 메모리 초과가 된다. 다음와 같이 재귀함수를 활용하여 바로바로 출력을 하는 연습을 하자! (메모리가 작을 것이다.) import sys N,M = map(int,sys.stdin.readline().split()) hi=[False]*N test = [] def solve(depth,idx,N,M): if depth == M: print(test) for i in range(idx,N): if hi[i] == 0: test.append(i+1) hi[i] = True solve(depth+1,i+1,N,M) hi[i] = False test.pop() solve(0,0,N,M) 2020. 3. 10.
[백준] #1931 회의실 배정 [핵심] 그리디 알고리즘 최선의 선택을 하기전에 중요한것은 최선의 선택만 했을 때 답이 나오게 만들어야 한다는 것이다. sort에 key를 설정하여 x[1],x[0] 순으로 정렬을 하고 배정된 회의실의 수를 세는것이 왜 가장 많은 회의실을 배정하는 개수를 세는것인지 이해하는것이 중요하다. import sys num = int(input()) numlist = [] for i in range(num): a,b = map(int,sys.stdin.readline().split()) numlist.append([a,b]) numlist.sort(key = lambda x :[x[1],x[0]]) start = 0 count =0 for i in numlist: if i[0] >= start: start = i.. 2020. 3. 10.
[백준] #2869번 달팽이는 올라가고 싶다 # while문을 이용하여 풀면 시간초과 난다 # V-b를 통하여 밤이되기전 낮에 완주를 하는 경우를 생각해줘야 한다. import sys a,b,v = map(int,sys.stdin.readline().split()) tem = (v-b) / (a-b) if tem == int(tem): print(int(tem)) else: print(int(tem)+1) 2020. 3. 10.