백준 알고리즘 파이썬(Python) 19598번 최소 회의실 개수
2021. 4. 15. 12:20
Algorithm
굉장히 골머리를 먹었던 문제다. 이 문제는 앞서 회의실배정 문제와 유사한듯 하나 알고리즘이 훨씬 복잡한 문제였다. N = int(input()) #N개의 회의실을 부여받는다. metting = [] #빈 리스트를 생성한다. for _ in range(N): start,end = map(int,input().split()) #회의 시작시간과 끝나는 시간을 입력받는다. metting.append([start,1]) #시작시간에는 1과 함께 metting.append([end,-1]) # 끝나는 시간에는 -1 과 함께 라스트에 추가해준다. metting.sort() #metting 리스트의 원소 [a,b] 에서 a의 오름차순으로 정렬 room = 0 metting_cnt = 0 for _,state in me..
백준 알고리즘 파이썬(Python) 2217번 로프
2021. 4. 14. 20:51
Algorithm
처음 문제를 봤을때 바로 이해되는 않았던 문제다. 그리고 처음 제출땐 매우 중요한 부분을 간과하고 제출해 실패의 고배를 마셨다. 바로 "모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다" 이부분이다. 처음에 이부분을 간과해 그냥 로프 최대중량을 리스트에 넣은다음 가장 작은값(min)에 n을 곱해 답을 구했다. 하지만 모든 로프를 사용하지 않아도 되므로 이렇게 풀어서는 안된다. 이 부분의 해결법은 모든 리스트들을 오름차순으로 정렬하고 가장 작은 값부터 차례대로 모든 원소에 곱해나가며 하나씩 제거해 그 값들중 가장 큰 값을 출력하는 것이다. 말로 하면 어려우니 코드를 보자. n = int(input()) array = [] for _ in range(n): a = int(..
백준 알고리즘 파이썬(Python) 14916번 거스름돈
2021. 4. 14. 20:16
Algorithm
지난번 설탕배달(2839번) 문제와 매우 유사한 문제이다. 사실 같은 문제라고 봐도 무방하다. 설탕배달 문제를 풀 때는 일일히 5로 나눈 나머지가 1일때, 2일때, 3일때 ... 그야말로 삽질을 여러번 했는데 이번에는 그래도 while 문을 사용해 빠르게 해결했다. n = int(input()) cnt = 0 while True: if (n%5) == 0: cnt = cnt + (n//5) print(cnt) break n = n - 2 cnt = cnt + 1 if n < 2: #각자 판단할 것이 다르면 elfi가 아닌 if를 써준다. print(-1) break 여기서 한가지 주의할 점은 if가 나온뒤 elif 가 아닌 다시 if 가 나오는 것이다. 위에 if문과 아예 다른것을 판단하기 때문에 eli..
백준 알고리즘 파이썬(Python) 2141번 우체국
2021. 4. 11. 14:47
Algorithm
이번 문제는 문제자체를 이해하는데 조금 시간이 걸렸다. 이 문제의 핵심은 우체국은 마을 위치에 있어야 한다 인것 같다 n = int(input()) #마을의 개수 n array = [] #빈 리스트 생성 for i in range(n): x,y = map(int, input().split()) array.append([x,y]) #마을의 위치, 인구수 [(x,a)] array = sorted(array, key = lambda i : i[0]) #마을 위치 순서대로 array를 배열 pop = 0 for i in range(n): k = array[i][1] #인구수를 차례차례 더해서 총 인구수를 구한다. pop = pop + k mid = pop//2 #인구수의 중간값을 구하기 위해 2로 나눈 몫을 구..
백준 알고리즘 파이썬(Python) 1541번 잃어버린 괄호
2021. 4. 11. 14:38
Algorithm
이 문제의 핵심은 최초로 마이너스가 나오기 전까지 나오는 숫자는 모두 더해주며, 이후 마이너스가 나오는 순간부터 모조리 다 빼준다. num = input().split('-') #마이너스를 기준으로 split 해준다. min_num = 0 for i in range(len(num)): if i == 0: min_num = eval(num[0]) #처음 - 가 나올때 까지 모두 더해준다.(eval 안에 식이 모두 더하기이므로) else: min_num = min_num - eval(num[i]) # 그 이후 모든 값들을 다 빼준다. print(min_num) 처음 내가 푼 코드는 이러하다. 하지만 무슨일인지 런타임 에러 (SyntaxError) 가 계속 난다.......... 아직 해결하지 못했다 아시는 ..