[1940] 주몽 (투 포인터, 정렬)
·
Coding Test/Data Structure
1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net """ 갑옷을 만드는 재료들은 각각 고유한 번호를 가지고 있다. 갑옷은 두 개의 재료로 만드는데 두 재료의 고유한 번호를 합쳐서 M(1 ≤ M ≤ 10,000,000)이 되면 갑옷이 만들어 지게 된다. 야철대장은 자신이 만들고 있는 재료를 가지고 갑옷을 몇 개나 만들 수 있는지 궁금해졌다. 이러한 궁금증을 풀어 주기 위하여 N(1 ≤ N ≤ 15,000) 개의 재료와 M이 주어졌을 때 몇 개의 갑옷을 만들 수 있는지 출력 첫째 줄에는 재..
[10986] 나머지 합 (합배열)
·
Coding Test/Data Structure
10986번: 나머지 합 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) www.acmicpc.net 분석 (A+B)%C = ((A%C)+(B%C))이므로 특정 구간 수들의 나머지 연산을 더해 나머지 연산을 한 값과 이 구간 합의 나머지 연산을 한 값은 동일 구간 합 배열을 이용한 식 S[i]-S[j]는 원본 리스트의 j+1부터 i까지의 구간 합이므로 합배열의 나머지 값이 같으면 두개 뽑아서 합배열 값-합배열 값으로 나누어떨어지는 구간 찾을 수 있음 S[i]%M의 값과 S[j]%M의 값이 같다면 (S[i]-S[j])..
[11660] 구간합 구하기5 (2차원 합배열)
·
Coding Test/Data Structure
11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 분석 2차원 합배열 채우기 : d[i][j] = d[i-1][j] + d[i][j-1] - d[i-1][j-1] + a[i][j] 2차원 구간합 구하기 : d[x2][y2]-d[x1-1][y2]-d[x2][y1-1]+d[x1-1][y1-1] 풀이 import sys input=sys.stdin.readline n,m = map(int, input().split()) # 리스트 a=[[0]*(n+1)] # 합배열 d=[[0..
애너그램 (딕셔너리, 리스트)
·
Coding Test/Data Structure
문제 Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다. 예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다. 길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별, 아나그램 판별시 대소문자가 구분 AbaAeCe baeeACA 풀이 딕셔너리 a=input() b=input() str1=dict() str2=dict() for x in a: str1[x]=str1.get(x,0)+1 for x in b: str2[x]..
[11286] 절댓값 힙 (heapq, PriorityQueue)
·
Coding Test/Data Structure
11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net import sys input=sys.stdin.readline from heapq import heappush, heappop n=int(input()) q = [] for _ in range(n): num=int(input()) if num==0: if len(q) > 0: print(heappop(q)[1]) else: print(0) else: heappush(q, (abs(num), num)) from queue import Prio..
[11279] 최대 힙 (heapq)
·
Coding Test/Data Structure
11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net import sys input=sys.stdin.readline from heapq import heappush, heappop n=int(input()) q = [] for _ in range(n): num=int(input()) if num==0: if len(q) > 0: print(heappop(q)[1]) else: print(0) else: heappush(q, (-num, num))