링크 : https://www.acmicpc.net/problem/15903 문제소요시간: 7분 42초설계하기(접근방법) 1. 입력받기입력받을 카드의 개수가 최대 100만개이다. 시간복잡도를 고려해야한다 2. 구현하기카드의 합을 가장 작게 만드는 법은, 가장 작은 카드끼리 더해서 새로운 합을 만드는 것이다누적합의 개념을 생각하면 쉽게 이해할 수 있을 것이다 해당 개념을 사용하려면 리스트의 최소 원소 2개를 추출할 수 있어야한다.일반 리스트로는 100만개의 원소를 다 처리할 수 없다 따라서 heapq를 import하여 항상 최소 원소를 빠르게 뱉어낼 수 있도록 선언하자 합체 횟수만큼, heappop을 2번하여 더한 후, 그 결과를 heappush하면 된다 3. 출력하기heap의 sum을 출력해준다 코드(..
링크 : https://www.acmicpc.net/problem/5430 문제소요시간: 48분 52초설계하기(접근방법) 1. 입력받기리스트가 숫자로 주어지는 것이 아닌 문자열로 주어지기에 고민해야한다 먼저 split(,)으로 문자열을 나누어준 후,왼쪽 끝과 오른쪽 끝의 괄호를 제거해준다 또한 배열의 원소 수가 많기 때문에 앞쪽의 원소를 제거하다 시간초과가 날 수 있다.deque를 통해서 popleft를 사용할 수 있도록 해주자 2. 구현하기 입력받은 deque를 R일 때는 pop()을정방향일 때는 popleft()를 수행할 수 있도록 짝수 홀수 카운터를 선언한다 중간에 배열이 비어버린 경우에 D를 수행한다면 error을 출력하고 다음 케이스로 넘어갈 수 있도록 구성하자 3. 출력하기 결과로 나온 리..
링크 : https://www.acmicpc.net/problem/16918문제소요시간: 1시간 26초설계하기(접근방법) 1. 입력받기격자판을 입력받으면서 숫자(초)로 바꿔준다 2. 구현하기while문을 통해 시간동안 시뮬레이션을 실행한다.+ 아래의 코드로 수정했다. 3. 출력하기숫자를 다시 문자로 바꾸어주어 출력한다. 코드(출력)x, y , time = map(int,input().split())vec = []field = [[0 for i in range(y)] for _ in range(x)]for _ in range(x): vec.append(input())# 폭탄 시간으로 변환 for i in range(x): for j in range(y): if vec[i][j] ==..
링크 : https://www.acmicpc.net/problem/19638 문제소요시간: 17분 53초설계하기(접근방법) 1. 입력받기입력이 10만개이니 sys를 통해 입력받는다 2. 구현하기 가장 키가 큰 거인에게 망치를 쓴다는 조건이 주어졌다거인이 10만명이니 리스트에서 매번 큰 거인을 찾는다면 시간이 초과될 것이다 따라서 heapq를 사용하여 가장 키가 큰 거인을 빠르게 찾을 수 있도록 구성해야 한다 입력받은 거인의 키에 (-1)을 곱해 거인의 키를 heappush 해준다 거인의 키가 입력되었으면 시도만큼 망치를 때리면서 1/2 floor을 해준다 문제에서 키가 1인 경우에는 더 이상 줄어들징 않는다고 했으니,망치를 치기 전에 가장 키가 큰 거인의 크기가 1인지 아닌지 검사해야한다.while문을..