-문제: https://www.acmicpc.net/problem/1931

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 

-정답 풀이:

 

  • 첫번째로 입력받은 수들을 정렬해야한다
  • 이때 회의 시작시간==종료시간인 경우가 있으므로 6번,7번 라인을 수행한다
  • 시작시간이 이전 회의의 종료시간보다 뒤에 있다면 회의 수 추가하고 끝나는 시간 변경하면 된다 

-문제: https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

처음에 어렵게 생각해서 시간을 조금 날렸지만, 알고보니 쉬웠던 문제

 

-정답풀이:

n=int(input())
s=list(map(int,input().split()))
cnt=0
s=sorted(s)

for i in range(n):
    cnt= cnt+ s[i]*(n-i)
print(cnt)

-문제: https://www.acmicpc.net/problem/11047

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

 

-정답풀이: 

n,k=map(int,input().split())
data=[]
for _ in range(n):
    data.append(int(input()))
count=0
answer=0
for i in range(n-1,-1,-1):
    if data[i]<=k:
        count=k//data[i]
        k-=count*data[i]
        answer+=count
print(answer)
  • 문제의 다음과 같은 조건 때문에 그리디로 풀 수 있다 

 

  • 주어진 k보다 작은 수 중에 가장 큰 수를 구해서 나누면 그 몫이 해당수의 개수이다
  • 나머지를 다시 k에 대입하고 같은 방법으로 반복한다 

-틀린 풀이: 

 

 

  • 이전에 공부했던 내용으로 풀었더니 시간초과가 발생했다. 

-문제:https://www.acmicpc.net/problem/14002

 

14002번: 가장 긴 증가하는 부분 수열 4

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

이전에 풀었던 LCS2와 같은 유형이라 참고해서 풀었다. 풀이없이 푼 문제 

 

-정답풀이: 

 

  • 윗부분은 가장 긴 증가 부분수열으로 코드 작성하면되고
  • 수열 숫자 출력하는 부분은 수열 마지막 숫자부터 시작해서 값을 하나씩 줄이면서 나가면된다
  • 숫자 출력시 숫자간 띄어쓰기가 필요하므로 14번 라인 중간에 '  '(공백)을 추가한다 
  • 14번처럼 작성하면 숫자가 순서대로 출력된다(입력되는 순서를 입력해서 그런가?)
  • 밑에 틀린 풀이 때문에 한동안 시간을 잡아먹었다 

-틀린풀이: 

 

  • 13번, 14번 라인으로 인해서 오류가 났다
  • 13번 때문에 10 20 30 50 으로 출력될 게 10 30 50 으로 출력돼서 틀렸음 

+ Recent posts