목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/10546 10546번: 배부른 마라토너 마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명 www.acmicpc.net 문제풀이 프로그래머스 Level 1 완주하지 못한 선수 문제와 같다. unordered_map을 이용해서 풀었다. 참가자의 이름을 입력받을 때는 runner[이름] 값을 +1을 했고, N-1개의 완주한 참가자의 이름을 입력받을 때는 runner[이름] 값을 -1 했다. iterator을 이용해 runner을 탐색하면서 value값이 0이 아닌 값을 찾으면 key값을 출력하고 종료한다..

문제 https://www.acmicpc.net/problem/4358 4358번: 생태학 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어 www.acmicpc.net 문제풀이 따로 끝을 알려주는 경우가 없고 띄어쓰기가 있어 한 줄을 입력받아야 하므로 while(getline(cin, name))을 사용했다. 정렬을 한 상태로 출력을 해야 하므로 unordered_map이 아닌 map을 사용했다. 입력받으면 unordered_map에 저장하고, 총개수에 +1을 한다. 모든 입력을 받았으면, iterator을 이용해 unordered_map을 탐색..

문제 https://www.acmicpc.net/problem/2075 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 문제풀이 단순히 모든 값을 입력받고 N번째 큰 수를 출력하려 했는데 메모리 초과가 났다. 그래서 N번째 까지는 값을 모두 입력받고, 그다음부터는 입력받을 값을 넣고 pop을 하여 우선순위 큐의 크기를 N으로 유지했다. 모든 값을 입력받았으면 top을 출력하면 된다. 우선순위 큐는 내림차순으로 정렬하기 위해 greater를 넣었다. 코드 #include #include using namespace s..

문제 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 한다. 그다음 ')'를 만나거나, '+' 또는 '-'가 연속으로 두 번 오는 경우에만 후위식으로 바꾸면 된다. '*' 또는 '/' 인경우 바로 뒷 문자가 '('이..