본문 바로가기

백준

(187)
[C++] 백준 1541번 - 잃어버린 괄호 문제 1541번https://www.acmicpc.net/problem/1541  식의 값을 최소로 만들기 위해서 +먼저 계산해준다.  기호가 들어온다면 -인지 아닌지 구분해서 sum에 계산을 해주고 temp를 비어준다. 여기서 string이기 때문에 int로 바꿔주기 위해 stoi()를 한다. 만약 -가 들어온다면 -여부를 판단해주는 mcheck를 true로 바꿔준다. 숫자가 들어온다면 temp에 숫자를 추가해준다. 그렇게 반복문을 다 돌고 계산이 끝나면 sum을 출력한다. #include #include using namespace std;int main() { string str, temp; cin >> str; int sum = 0; bool mcheck = false; //-여부 for (int..
[C++] 백준 2742번 - 기찍 N 문제 2742번https://www.acmicpc.net/problem/2742 오늘은 시간이 너무 늦어서 간단한 문제를 풀었다.배열에 넣어서 풀려고 하다가 생각해보니까 그럴 필요가 없다는 것을 깨닫고 N부터 1까지 차례로 출력해주었다. #include using namespace std;int main() { int n; cin >> n; for (int i = n; i > 0; i--) { cout
[C++] 백준 11047번 - 동전 0 문제 11047번https://www.acmicpc.net/problem/11047 n의 최댓값이 10이기 때문에 크기가 11인 배열 하나를 만들어준다. 입력값들을 배열에 차례대로 넣어주고, 동전 개수를 최소로 하기 위해 가장 큰 가치를 가진 맨 뒤부터 반복문을 돌려준다.  그리고 k에서 동전들을 빼가며 0보다 크거나 같다면 계속해서 반복해준다. 그 안에서는 개수를 count해주고 k의 값을 줄여나간다. 그렇게 반복문을 마치고 sum을 출력하면 그것이 k원을 만드는데 필요한 동전 개수의 최솟값이다.#include using namespace std;int main() { int n, k, sum = 0; int num[11]; cin >> n >> k; for (int i = 0; i > num[i]; ..
[C++] 백준 2346번 - 풍선 터뜨리기 문제 2346번https://www.acmicpc.net/problem/2346 몇번째인지와 이동해야할 수를 pair로 해서 덱에 저장시킨다. 그리고 덱이 빌 때까지 반복해준다. 일단 맨 앞에 있는 숫자를 출력해주고 pop해준다. 해당 수의 이동해야할 수가 양수인지 음수인지 확인하여 각각 수행해준다. 앞에서 이미 출력하고 pop을 했기 때문에 오른쪽으로 한번 이동된다. 그러므로 양수라면 (원래 이동해야되는 수 - 1)번 반복해준다. 양수는 앞의 숫자를 뒤로 이동시키며 맨 앞에 다음 숫자가 오도록 만들면 되고 음수는 반대로 뒤의 숫자를 앞으로 이동시키면 다음 숫자가 맨 앞에 오도록 만든다. #include #include using namespace std;int main() { int n; deque >..
[C++] 백준 28279번 - 덱 2 문제 28279번https://www.acmicpc.net/problem/28279 그냥 썼더니 시간 초과가 나와서 아래의 코드를 추가해줬다. ios::sync_with_stdio(false); cin.tie(NULL); 이번에는 if문이 아니라 switch문을 사용했다. 입력값이 뭔지에 따라 해당 case의 내용을 수행해준다. 그리고 각 case가 끝날 때마다 break한다. (break를 안 하면 다음 case를 수행하게 됨)  덱은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조이기 때문에 push와 pop을 할 때 front에서 할 건지 back에서 할 건지, 그에 맞는 함수를 사용해야 한다.#include #include using namespace std;int main() { ios::sy..
[C++] 백준 11866번 - 요세푸스 문제 0 문제 11866번https://www.acmicpc.net/problem/11866 큐에 1부터 n까지의 수를 넣고 k번째가 되기 전인 k-1까지 반복하여 숫자를 뒤로 넣고 앞 숫자는 버려준다. k번째가 되면 해당 값을 출력해주고 만약 그 수가 마지막 수라면 ,를 출력해준다. 그리고 마지막에 pop을 통해 출력한 숫자를 버려준다. #include #include using namespace std;int main() { int n, k; cin >> n >> k; queue q; for (int i = 1; i 0) { for (int i = 0; i "; return 0;}
[C++] 백준 2164번 - 카드 2 문제 2164번https://www.acmicpc.net/problem/2164 순서대로 넣고 앞에서부터 빼고 뒤로 넣고 하는 것이기 때문에 큐를 사용한다. q에 입력값에 맞는 숫자들을 넣어주고, 수행해야되는 것을 큐의 사이즈가 1이 될 때까지 반복문을 돌려준다. 먼저 앞 숫자를 pop으로 버리고 front로 맨 앞에 있는 것을 가지고 push를 통해 큐의 맨 뒤에 다시 넣어준다. 그리고 옮긴 숫자는 pop으로 버려준다.#include #include using namespace std;int main() { int n; queue q; cin >> n; for (int i = 1; i 1) { q.pop(); //버리기 q.push(q.front()); //맨 위에 있는 숫자를 맨 아래로 q...
[C++] 백준 18258번 - 큐 2 문제 18258번https://www.acmicpc.net/problem/18258 이번에는 큐이다. 입력값에 따라 조건문을 이용하여 문제에 나와있는 것처럼 수행해주도록 만든다.#include #include #include using namespace std;int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); queue q; int n, x; cin >> n; string command; while (n--) { cin >> command; if (command == "push") { cin >> x; q.push(x); } else if (command == "pop") { if (q.empty()) { cout