모든 문제의 답은 Python3으로 작성함

 

11047번: 동전 0

inp=input().split()
n=int(inp[0])
k=int(inp[1])
digit=[]
for i in range(n):
    digit.append(int(input()))
digit.sort(reverse=True)

sum=0
left=k
for d in digit:
    if left>=d:
        sum += left//d
        left = left%d
        if left==0:
            break
print(sum)

 

1931번: 회의실 배정

n=int(input())
times=[tuple(map(int,input().split())) for _ in range(n)]
times.sort() #회의 시작 시간 기준 정렬
times.sort(key=lambda x:x[1]) #회의 끝 시간 기준 정렬

cur=0 #가장 최근에 한 회의 끝 시간
cnt=0
for t in times:
    if cur<=t[0]: #가장 최근 회의 이후에 시작할 때
        cnt += 1
        cur=t[1]
print(cnt)

예전에 알고리즘 과목에서 다뤘던 예제인데 오랜만에 보니,, 새롭네,,

일찍 시작하는 순서대로 정렬 후, 회의가 빨리 끝나는 순서대로 겹치지 않게 선택!

 

11399번: ATM

n=int(input())
times=list(map(int,input().split()))
times.sort()

cur=0
sum_time=0
for t in times:
    sum_time += cur+t
    cur+=t
print(sum_time)

 

1541번: 잃어버린 괄호

exp=input().split('-')
sum=0
for i in range(len(exp)):
    e=exp[i].split('+')
    if i==0:
        for j in range(len(e)):
            sum+=int(e[j])
    else:
        for k in range(len(e)):
            sum-=int(e[k])
print(sum)

가장 첫번째로 나오는 마이너스 기호 이후를 최솟값으로 만들면 된다.

 

13305번: 주유소

n=int(input())
dis=list(map(int,input().split()))
price=list(map(int,input().split()))

price_sum=price[0]*dis[0]
cur_price=price[0]
for i in range(1,n-1):
    if cur_price>=price[i]:
        cur_price=price[i]
    price_sum+=cur_price*dis[i]
print(price_sum)

가격이 이전 도시에 비해 낮을 때 cur_price 업데이트

모든 문제의 답은 Python3으로 작성함

 

10872번: 팩토리얼

def fac(n):
    if n==0 or n ==1:
        return 1
    else:
        return n*fac(n-1)

n = int(input())
print(fac(n))

 

10870번: 피보나치 수 5

 

def fib(n):
    if n==0:
        return 0
    if n==1 or n==2:
        return 1
    else:
        return fib(n-2)+fib(n-1)

n = int(input())
print(fib(n))

 

2447번: 별 찍기 - 10

def star(n):
    if n==3:
        return ["***","* *","***"]
    else:
        old = star(n//3)
        new = []
        for j in range(n):
            new.append('')
            
        for a in range(n//3):
            new[a]=old[a]*3
            new[n-a-1]=old[a]*3
            
        for b in range(n//3, n//3*2):
            new[b]=old[b-n//3] + ' '*(n//3) + old[b-n//3]
            
        return new
        

n = int(input())
star = star(n)
for i in range(n):
    print(star[i])

 

11729번: 하노이 탑 이동 순서

def hanoi(n, f, tmp, to):
    if n==1:
        print(f, to)
    else:
        hanoi(n-1, f, to, tmp)
        print(f, to)
        hanoi(n-1, tmp, f, to)

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

 

+ Recent posts