10872

https://www.acmicpc.net/problem/10872

def factorial(n): return 1 if n==0 else n*factorial(n-1)
print(factorial(int(input())))

17478

https://www.acmicpc.net/problem/17478

def prt(n,cnt):
    dash = '____'*cnt
    li = ['"재귀함수가 뭔가요?"','"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.','마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.','그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."']
    a = '"재귀함수는 자기 자신을 호출하는 함수라네"'
    b = '라고 답변하였지.'
    if n == 0: print(dash+li[0]);print(dash+a);print(dash+b);return
    for i in li: print(dash+i)
    prt(n-1, cnt+1); print(dash+b)

print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
prt(int(input()), 0)

11004

https://www.acmicpc.net/problem/11004

import random, sys
random.seed(42)
input = sys.stdin.readline
def QuickSelect(A, k):
    s, m, l = [], [], []; 
    pivot = A[random.randint(0,len(A)-1)]
    for i in A:
        if i<pivot: s.append(i)
        elif i == pivot: m.append(i)
        else: l.append(i)
    if len(s)>=k: return QuickSelect(s,k)
    elif len(s)+len(m) < k: return QuickSelect(l,k-len(s)-len(m))
    else: return pivot

n,k = map(int, input().split())
li = list(map(int, input().split()))
print(QuickSelect(li,k))

problem 1 : 메모리 초과, 시간 +

기존 quickselect 이용 시 메모리 초과

soltion

quickselect에서 피봇을 설정할 때 0번째 요소가 아닌, random으로 설정하도록 하여 해결

11729

https://www.acmicpc.net/problem/11729

def hanoi(n, first, second, third):
    if n == 1: print(first, third); return
    else:
        hanoi(n-1, first, third, second)
        print(first, third)
        hanoi(n-1, second, first, third)

n = int(input())
print((2**n)-1)
hanoi(n, 1, 2, 3)