문제 : https://www.acmicpc.net/problem/12789 12789번: 도키도키 간식드리미 인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두 www.acmicpc.net 어떤 문제인가? 일단 우리 학교 대회 문제다ㅋㅋ 괜히 반갑게 느껴진다. 문제는 1번부터 N번까지 번호표가 존재하고 번호표 순서대로 간식을 받을 수 있는지 없는지 여부를 출력하면 된다. 접근 방법 문제를 읽자마자 스택과 큐를 사용해야겠다고 떠올렸다. stack waiting; queue student; vector after; 현재 줄이 서있는 곳인 큐로, 대기 공간은 스택으로, 간식 받..
분류 전체보기
문제 : https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 어떤 문제인가? 명령어와 수열을 입력받고 명령어에 맞게 연산을 실행한 후 결과를 출력하면 된다. 접근 방법 처음에는 벡터에 문자를 저장했다. 그리고 R이 입력될 때마다 reverse함수로 정말 벡터를 역순으로 만들어줬다. 당연히 결과는 시간 초과...... 그래서 다른 방법을 생각하다가 할 수 있는 연산이 2개밖에 없으니 정말 뒤집지 말고 뒤집어졌다고 생각하고 연산을 하기로 했다. 만약 현재 상태가 뒤집어져있는 상태가 아닐 때 D가 입력되면 맨..
문제 : https://www.acmicpc.net/problem/13335 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 어떤 문제인가? 문제가 길다. 간단히 말하면 n대의 트럭이 길이가 w인 다리를 건널 때 다리의 최대하중인 L을 지켜가며 건너야 한다. 이때 모든 트럭이 다리를 건너는 최소 시간을 출력하면 된다. 접근 방법 queue truck; deque bridge; 아직 다리에 올라가지 않은 트럭들은 queue를 사용해 저장한다. 다리에 올라간 트럭은 ..
문제 : https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 어떤 문제인가? 1번부터 N번까지 사람이 있고 K번째 사람을 제거해가며 제거된 사람들을 순서대로 출력하는 문제이다. 접근 방법 문제에서 사람들이 원을 그리고 앉아있다는 것을 보고 원형 큐를 사용해야겠다고 생각했다. k번째 사람이 큐의 맨 앞에 오도록 해 준 다음 front를 출력하고 사람이 제거되어야 하니 pop을 해줘야겠다고 생각했다. int n, k; queue q; cin >> n >> k; for (int i = 1; i
문제 : https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 어떤 문제인가? 문자열을 입력받고 가상의 커서가 존재해서 문자와 문자 사이를 왔다 갔다 하며 삭제하거나 추가하는 기능을 구현하면 된다. 사실 우리가 키보드로 타이핑할 때와 똑같은 경우이다. 그리고 모든 연산이 끝난 후의 문자열을 출력하면 된다. 접근 방법 vector text; string input, order; int M; cin >> input >> M; int cursor = inp..
문제 : https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 어떤 문제인가? 문제에 특별한 어려움은 없는 문제였다. 레이저를 기준으로 잘린 쇠막대기의 개수를 구하면 된다. 접근 방법 문제를 읽고 고민 없이 바로 stack을 사용하기로 결정했다. 입력받은 문자열의 index를 하나하나 살펴보면서 각각에 경우에 따른 처리를 해주면 된다. int cnt = 0; stack stick; 잘린 쇠막대기의 개수를 셀 cnt를 0으로 초기화해준다. 괄호를 넣어둘 char..
문제 : https://www.acmicpc.net/problem/2841 2841번: 외계인의 기타 연주 첫째 줄에 멜로디에 포함되어 있는 음의 수 N과 한 줄에 있는 프렛의 수 P가 주어진다. (N ≤ 500,000, 2 ≤ P ≤ 300,000) 다음 N개 줄에는 멜로디의 한 음을 나타내는 두 정수가 주어진다. 첫 번째 정수 www.acmicpc.net 어떤 문제인가? 기타를 치는데 가장 높은 프렛의 음이 발생하는 조건이 있다. 따라서 원하는 음을 치자고 할 때 높은 프렛을 누르고 있던 손가락을 떼야한다. 원하는 음이 기존에 누르고 있던 프렛보다 높다면 상관은 없다. 이때, 입력한 n번만큼 원하는 프렛과 줄 번호가 주어졌을 때, 손가락을 가장 적게 움직이는 횟수를 출력해야 한다. 접근 방법 처음에는..
문제 : https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 어떤 문제인가? 1번 풍선부터 N번 풍선까지 각 풍선마다 다음 풍선으로 이동하는 번호가 존재한다. N을 입력한 후 1번 풍선부터 시작해 모든 풍선이 터지는 순서를 출력하면 된다. 접근 방법 먼저 풍선의 번호와 각 풍선의 이동 크기를 저장할 자료구조가 필요했다. 큰 생각 없이 vector와 pair를 사용하기로 결정했다. vectorballoon; 그리고 입력받은 n만큼 ..
문제 : https://www.acmicpc.net/problem/17219 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 어떤 문제인가? 입력된 n번동 안 사이트 주소와 비밀번호를 입력받고 입력된 m번 동안 사이트 주소를 입력하면 해당하는 비밀번호를 출력하면 된다. 벌써 어떻게 풀지 감이 잡히지 않나? 접근 방법 map을 사용하면 아주 간단하게 해결할 수 있다. map list; 먼저 key와 value를 모두 문자열로 하는 map을 선언해준다. for(int i=0;i> si..
문제 : https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 어떤 문제인가? n번 입력을 받고 사람의 이름에 대해 출근, 퇴근을 처리한다. 입력이 끝난 후 퇴근하지 않은 사람들의 이름을 역순으로 출력한다. 문제의 요구사항은 어렵게 느껴지지 않았다. 접근 방법 vector people; for(int i=0; i> name >> enter; if(enter=="enter"){ people.push_back(na..