목록Baekjoon/Silver (86)
GitHubSeob

문제 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/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/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 문제풀이 먼저 입력이 올바르진 못한 괄호 열을 판별하기 위해 for문으로 판별을 한다. 그다음 while문으로 []을 2로 치환, ()을 3으로 치환한다. 그다음 while문으로 피연산자, 피연산자, 연산자 형태로 나열되어있는 idx를 찾고 연산을 한 후 idx에 연산 값을 저장, erase로 idx+1, idx+2를 지운다. 모든 연산이 끝나 더 이상 연산을 할 수 없는 경우는 피연산자 ..

문제 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 문제풀이 deque 말고 벡터를 이용해서 풀었다. 풍선을 터뜨려서 나온 종이의 값이 양수이면 오른쪽으로, 음수이면 왼쪽으로 이동한다. balloon[].first는 풍선 안에 있는 종이의 값, balloon[].second는 해당 풍선이 몇 번째 인지를 나타낸다. while문에서 풍선의 번호를 출력하고, 종이의 값을 num에 대입하고, balloon[idx]를 erase 한..

문제 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제풀이 들어온 입력을 스택을 이용해서 pop을 했을 때 순서대로 만들 수 있는지 여부를 출력하는 문제이다. 처음엔 오름차순 순열을 따로 만들어 지저분하게 풀었는데 다른 사람의 코드를 참고하여 다시 풀었다. for (idx = 0; idx < n; ++idx) { while (s.empty() || s.top(..

문제 https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제풀이 입력받은 값에서 한자리씩 끊어 확인한다. pipe는 레이저를 만났을 때 잘려서 나눠진 파이프의 개수, answer는 파이프의 총 개수이다. idx가 '(' 이고, idx+1가 ')'이라면 answer에 pipe값을 더한다. 그리고 idx에 1을 더해 레이저 다음 부터 다시 확인하도록 한다. idx가 '(' 이고 idx+1가 '('이라면 pipe 개수를 하나 늘린다. idx가 ')' 이면 파이프..