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

 

-정답 풀이 : 

가장 큰 무게를 들 수 있는 크레인디 들 수 없는 무게가 있다면 모든 박스를 배로 옮길 수 없기에 -1을 출력한다

그 외에는 가장 큰걸로 여러번 옮기나 여전히 옮길 수 있으므로 진행한다

크레인 단위로 가야하니까 크레인 단위로 boxes를 탐색한다.

탐색하다 조건(크레인의 무게보다 적은) 박스가 있을 때마다 그 박스를 없애준다

이전 풀이에 비하면 약 10배는 시간이 더 걸리지만, 일단 이게 제일 이해가 잘가서 다음 풀이로 기록한다. 

n=int(input())
cranes=list(map(int,input().split()))
m=int(input())
boxes=list(map(int,input().split()))

cranes.sort(reverse=True)           
boxes.sort(reverse=True)
if cranes[0]<boxes[0]:
    print(-1)
else:
    answer=0
    while(len(boxes)>0):
        answer+=1
        for i in range(n):           
           for j in range(len(boxes)):
               if cranes[i]>=boxes[j]:
                   del boxes[j]
                   break
    print(answer)

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

 

스스로 푼 문제다! 전에 풀었을때는 잘 못해서 아쉬웠는데, 이번에 2트만에 맞혀서 뿌듯하다

학생들이 원하는 책 중 한 권씩만 줄 수 있다고 하고, 또 거기서 최대 학생 수를 구하라고 해서 

정렬을 무조건 해야겠다고 생각했다. 

정렬을 하면, 책을 원하는 순서대로 차곡차곡 주면 줄 수 있는 학생에게 모두 줄 수 있기 때문이다. 

그 다음 count리스트에 1부터 n까지의 인덱스에 1을 넣고, 이게 책이 있다는 의미이므로 학생이 원하는 책 번호 중에 1인 최소 인덱스에 대해 학생수를 카운트(result+=1)하고, 책을 주고(count[j]=0) 그 반복문을 나오면 된다. 

Gold Level2 문제

 

-정답 풀이:

t=int(input())

for _ in range(t):
    n,m=map(int,input().split())
    students=[]
    for _ in range(m):
        students.append(list(map(int,input().split())))
    students.sort()
    students.sort(key=lambda x: x[1])
    result=0
    count=[0]+[1]*n
    
    for i in range(m):
        a,b=students.pop(0)
        for j in range(a,b+1):
            if count[j]==1:
                count[j]=0
                result+=1
                break
                
    print(result)

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

 

스스로 푼 문제!

Gold Level5 

코테에서 자주 나오는 유형이 x에서 y로 변환시키는 것에 대한 문제에서는 y에서 x로 역순으로 가면서 푸는 것이다. 

 

-정답풀이:

s=list(input())
t=list(input())

while True:
    if len(t)==len(s) :
        if t==s:
            print(1)
            break
        else:
            print(0)
            break
    if t[-1]=='A':
        t=t[:-1]
    elif t[-1]=='B':
        t=t[:-1]
        t.reverse()

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

 

스스로 푼 문제이다. 

IndexError 해결한 과정 추가하기

6%에서 위 에러가 발생하길래 무엇이 문제인지 생각하다가 j의 upperbound를 설정안 한 것을 깨달았다.

예제에서는 j의 upperbound를 설정하지 않아도 마지막 인덱스 값이 0보다 크므로 알아서 break 하지만,

마지막 인덱스 값이 11이 아니라 10이면 IndexErrorr가 발생함을 알았다. 

그래서 if j>=n: break 문을 추가하니까 정답이 떴다. 

 

기존의 증가하는 부분 수열과는 다른 문제다. 증가하는 부분수열은 i보다 큰 j(i+1,n-1)가 있으면 카운트 하지만, 

여기서는 하나의 j라도 i보다 크면 거기서 멈춘다. 그래서 For + while 문의 형태로 진행했다. 

Pypy3으로 해야 시간초과가 안나고 정답이다. sys.stdin.readline에 python3을 해봤으나 시간초과가 떴다 

 

-정답풀이:

n=int(input())
data=list(map(int,input().split()))
sequence=[0]*n

for i in range(n):
    j=i+1    
    while True:
        
        if j>=n:
            break
        if data[j]>=data[i]:
            break
        else:
            sequence[i]+=1
        j+=1
print(max(sequence))

+ Recent posts