SW개발/코딩테스트
[백준]2217번 로프 - 그리디
n = int(input()) weight = [] for i in range(n): weight.append(int(input())) weight.sort(reverse=True) max = weight[0] for i in range(1, n): if max < weight[i] * (i+1): max = weight[i] * (i+1) print(max) 코드 설명 각 무게를 weight 리스트에 입력 받은 후 내림차순으로 정렬한다. 현재까지 가장 큰 값은 weight[0] 이다. 반복문을 수행하면서 weight[i] * (i+1) 의 값이 max 보다 크면 갱신하여 준다. Point : 먼저 중량순으로 정렬해주기 위해 sort(reverse=True) 함수를 이용하여 준다. 맨 처음 최대 중량은 ..
[백준]5585번 거스름돈 - 그리디
n = int(input()) n = 1000 - n answer = 0 while True: if n // 500 >= 1: answer = answer + (n // 500) n = n - ((n // 500) * 500) elif n // 100 >= 1: answer = answer + (n // 100) n = n - ((n // 100) * 100) elif n // 50 >= 1: answer = answer + (n // 50) n = n - ((n // 50) * 50) elif n // 10 >= 1: answer = answer + (n // 10) n = n - ((n // 10) * 10) elif n // 5 >= 1: answer = answer + (n // 5) n = n ..
[백준]11047번 동전0 - 그리디
n, k = map(int,input().split()) a = [] cnt = 0 for i in range(n): a.append(int(input())) for i in range(len(a)-1, -1, -1): if k < a[i] : continue cnt = cnt + int(k / a[i]) k = k % a[i] if k == 0: break print(cnt) 코드 설명 먼저 a 리스트에 이용가능한 동전의 가치를 저장해준다. 가장 큰 가치를 가진 동전을 먼저 사용해야 하므로 반복문을 거꾸로 수행한다. 만약 동전의 가치가 K원보다 크다면 continue를 통해 다음 반복을 수행한다. 그렇지 않다면 카운트에 그 몫을 더해준다. k 는 나머지 연산을 통해 숫자를 갱신해준다. k == 0 이 ..
[백준]2839번 설탕 배달 - 그리디
n = int(input()) answer = 0 while True: if n % 5 == 0: answer = answer + n // 5 print(answer) break n -= 3 answer += 1 if n < 0 : print(-1) break 코드 설명 5키로의 봉지로만 나눌 수 있을 경우 그 몫을 answer에 더해준다. 나눌 수 없을 경우 3키로 봉지를 하나씩 선택하며 anwer 를 증가시켜 준다. 만약 n이 음수로 된다면 정확하게 만들지 못하는 것이므로 -1을 출력한다. Point : 5키로 봉지로 나눌 수 있을 경우에는 그 몫을 더하고 그렇지 못할 경우에는 3씩 빼주는 연산을 수행한다. 이 과정을 통해 적은 봉지수를 구할 수 있다. 만약 진행중 n의 값이 음수가 된다면 만들 수 ..
[백준]5430번 AC - 덱
from collections import deque import sys n = int(sys.stdin.readline()) for i in range(n): command = sys.stdin.readline().strip() # 명령어 length = int(sys.stdin.readline()) if length == 0: input() deque_ = deque([]) else: # 대괄호는 빼고 입력 받기 deque_ = deque( sys.stdin.readline()[1:-2].strip().split(',')) #print(deque_) flag = 1 # 뒤집기 체크 flag2 = 1 # 에러 체크 for i in range(len(command)): if command[i] == 'R..
[백준]1021번 회전하는 큐 - 덱
from collections import deque import sys n, m = map(int, sys.stdin.readline().split()) deque = deque([]) for i in range(1, n + 1): deque.append(i) a = list(map(int, sys.stdin.readline().split())) cnt = 0 for i in range(m): # 2번 연산이 유리한 경우, 뽑으려는 값이 덱에서의 인덱스가 더 작을 경우 if deque.index(a[i]) < len(deque) - deque.index(a[i]): while True: if deque[0] == a[i]: deque.popleft() break else: deque.append(deq..
[백준]10866번 덱 - 덱
from collections import deque import sys n = int(sys.stdin.readline()) deque = deque([]) for i in range(n): command = sys.stdin.readline().strip() if command.split()[0] == 'push_front': deque.appendleft(int(command.split()[1])) elif command.split()[0] == 'push_back': deque.append(int(command.split()[1])) elif command == 'pop_front': if len(deque) == 0: print(-1) else: print(deque.popleft()) elif..
[백준]1966번 프린터 큐 - 큐
from collections import deque n = int(input()) for i in range(n): queue = deque([]) num, wh = map(int, input().split()) temp = (list(map(int, input().split()))) for i in range(len(temp)): queue.append(temp[i]) temp[wh] = 'answer' cnt = 0 while True: if queue[0] == max(queue): # 큐의 맨 앞자리가 우선순위가 제일 높은 경우 cnt = cnt + 1 # 카운트 if temp[0] == 'answer': # 지정한 인덱스가 맞을 경우 print(cnt) # 출력 break else: # 우선순..
[백준]11866번 요세푸스 문제 0 - 큐
from collections import deque queue = deque([]) n, k = map(int, input().split()) result = [] for i in range(n): queue.append(i+1) while True: if len(queue) == 0 : break for i in range(k-1): queue.append(queue.popleft()) result.append(queue.popleft()) print('') 코드 설명 반복문을 돌면서 큐의 길이가 0 인 경우 종료 한다. 반복문 안에서 K의 값 만큼 반복문을 수행하는데, 첫 번째 원소의 자리를 바꾸기 위해 popleft() 한 값을 append() 한다. K 번의 반복이 끝난 후 결과 리스트에 que..
[백준]2164번 카드 2 - 큐
from collections import deque queue = deque([]) n = int(input()) for i in range(1, n+1): queue.append(i) while True: if len(queue) == 1: break queue.popleft() queue.append(queue.popleft()) print(queue[0]) 코드 설명 큐 사용을 위해 deque 를 import 한다. 반복문을 돌면서 큐에 카드를 넣어준다. (이때 순서는 가장 큰 숫자가 마지막에 들어옴) 큐에 카드가 한장만 남을 때 까지 반복문을 수행한다. 한장은 버리고 한장은 빼서 제일 아래로 옮기는 과정을 반복한다. 큐에 남은 카드를 출력한다. Point: 두번의 연산을 연달아 수행한다. pop..