목록분류 전체보기 (370)
GitHubSeob

문제 https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 문제풀이 map을 이용해서 풀었다. I 숫자는 입력이므로 cin >> oper >> n을 통해 I와 값을 입력받고 map인 m을 선언하였으므로 m[n]의 값을 1 증가시킨다. 연산이 D 1일 경우 최댓값을 삭제해야 한다. 그래서 iterator인 iter을 선언하고 m의 end부분으로 간 뒤 한 칸 앞으로 이동(--m.end())한다. 동일한 값을 입력받을 수 있으므로 최댓값이 몇 개 입..

문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제풀이 compare라는 비교 함수를 정의하여 절댓값이 같으면 가장 작은 수를, 절댓값이 다르면 절댓값이 작은 수 순으로 정렬을 했다. 0을 입력받을 때 우선순위 큐가 비어있으면 0을 출력, 비어 있지 않으면 compare함수로 정렬한 대로 우선순위가 높은 값을 출력하고 pop을 하여 값을 제거한다. 0이 아닌 수를 입력받으면 우선순위 큐에 값을 입력한다. 코드 #in..
문제 https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net 문제풀이 0을 입력받으면 배열에서 가장 큰 값을 출력하고 제거한다. 0을 입력받을 때 배열이 비어있으면 0을 그대로 출력한다. 0 이외의 숫자를 입력받으면 배열에 집어넣는다. 배열 대신 숫자를 입력받을 때 값을 정렬해주는 우선순위 큐를 이용해 풀었다. 코드 #include #include using namespace std; int main() { ios::sync_wit..

문제 https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 문제풀이 unordered_map을 이용해서 풀었다. 문자열을 입력받을 때 insert({문자열, 1})을 하여 map에 추가한다. N개의 입력이 끝나고 M개의 문자열을 입력받을 때 map[문자열] 값을 answer에 계속 더해준다. (map에 없는 문자열을 입력받으면 map[문자열] 값은 0이므로) 코드 #include #include using namesp..

문제 https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 문제풀이 1부터 N까지 포켓몬 이름을 입력받고 도감 번호를 입력받으면 해당 포켓몬 이름을 출력, 포켓몬 이름을 입력받으면 도감 번호를 출력하면 된다. 포켓몬 이름을 입력받으면 pokemonS에, 도감 번호를 입력받으면 pokemonI에 저장한다. 도감 입력이 모두 끝났으면 입력에 따른 출력을 하면 된다. 입력이 숫자라면 string을 int로 형 변환하여 poke..

문제 https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 문제풀이 알파벳 순서는 서로 바뀌는 경우가 없으므로 입력받으면 바로 출력한다. 그 외의 경우는 스택을 이용하여 출력 순서를 정한다. '+' 또는 '-'인 경우 다음 연산자를 생각해야 하므로 바로 출력을 하지 않고 스택에 push 한다. 그다음 ')'를 만나거나, '+' 또는 '-'가 연속으로 두 번 오는 경우에만 후위식으로 바꾸면 된다. '*' 또는 '/' 인경우 바로 뒷 문자가 '('이..

문제 https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 문제풀이 입력을 받는 vectortower, 답을 저장하기 위한 vectoranswer, 스택을 쌓기 위해 stacks를 선언한다. 스택 s에는 타워의 번호 값을 저장한다. for문을 통해 가장 왼쪽에 있는 타워부터 오른쪽으로 이동하면서 비교를 한다. 만약 현재 스택의 top() 부분의 타워의 높이가 현재 비교하려는 타워 높이보다 높거나 같으면 레이저를 수신할 수 있으므로 answer에 s..

문제 https://www.acmicpc.net/problem/2800 2800번: 괄호 제거 첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개 www.acmicpc.net 문제풀이 큰 틀은 DFS이다. stackbracket은 괄호 '('와 해당 위치를 저장하기 위한 용도, setanswer는 중복 제거된 값들을 저장하는 용도, string input은 입력값, vectorremove는 True값이면 괄호를 지운다는 의미, False이면 지우지 않는다는 의미를 나타내는 용도이다. 0번째 인덱스부터 DFS를 시작한다. 스택을 이용..

문제 https://www.acmicpc.net/problem/22942 22942번: 데이터 체커 데이터가 조건에 맞는다면 YES, 조건에 만족하지 않는다면 NO를 출력한다. www.acmicpc.net 문제풀이 원이 모두 x축 위에 있으므로 모두 y=0이다. vector 를 이용하여 x좌표와 반지름을 입력받을 때 first에는 x-r, second에는 x+r값을 저장한다. (first = 원이 x축에 닿는 점 중 왼쪽 점, second 오른쪽 점) 먼저 왼쪽 점 좌표를 기준으로 오름차순으로 정렬한다. 이중 for문을 이용해 경우의 수를 따진다. - 첫 번째 if문 첫 번째 원의 first값 == 두 번째 원의 first값일 때 두 원이 겹치면 continue 그렇지 않으면 if문 조건에 걸려 NO출력..