본문 바로가기

분류 전체보기

(194)
[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
[C++] 백준 12789번 - 도키도키 간식드리미 문제 12789번https://www.acmicpc.net/problem/12789 입력된 값을 확인하여 해당 순서라면 그냥 보내주고 다음 순서로 넘어간다. 만약 아니라면 해당 입력값을 스택에 저장해준다. 그리고 스택이 비어있지 않고 맨 위가 해당 순서라면 스택에서 제거해주고 다음 순서로 넘어간다. 학생 수만큼 반복해주고 스택이 비어있으면 Nice를, 아니면 Sad를 출력한다. #include #include using namespace std;int main() { int n, count = 1; stack st; cin >> n; while (n--) { int input; cin >> input; if (count == input) { //입력된 값이 해당 순서이면 다음 순서로 넘어가기 ..
[C++] 백준 28278번 - 스택 2 문제 28278번https://www.acmicpc.net/problem/28278  이번에는 문제에 나온대로 구현하면 된다. 스택을 만들고 값을 넣을 때는 push(), 스택 안에 있는 값을 뺄 때는 pop(), 스택의 맨 위는 top(), 비어있는지 확인하는 것은 empty()이다. 여기서 비어있다면 1, 아니면 0이 반환된다.  cin, cout으로 하면 시간 초과가 되기 때문에 scanf와 printf를 사용하였다.  #include #include using namespace std;int main() { stack st; int N; scanf("%d", &N); for (int i = 0; i
[C++] 백준 11478번 - 서로 다른 부분 문자열의 개수 문제 11478번https://www.acmicpc.net/problem/11478 서로 다르게 하기 위해 중복이 없는 set을 이용한다. 그리고 이중반복문으로 부분 문자열들을 set에 삽입시킨다. 안에 있는 반복문이 끝날 때마다 str변수는 초기화해주어 다음 부분 문자열들을 구해준다. 그렇게 삽입을 다 완료한 set의 크기를 출력한다.#include #include #include using namespace std;int main() { string s; set st; cin >> s; string str = ""; for (int i = 0; i
[C++] 백준 7785번 - 회사에 있는 사람 문제 7785번https://www.acmicpc.net/problem/7785 map을 사용하여 회사에 들어온 사람을 넣어주고, 떠난 사람은 지워준다. 여기서 map의 default는 오름차순이기 때문에 역순으로 출력하기 위해서 greater을 사용해준다. 그렇게 반복문을 완료하면 해당 map의 첫번째 값들을 순서대로 출력해주면 된다.#include #include using namespace std;int main() { int n; map> m; cin >> n; for (int i = 0; i > name >> info; if (info == "enter") { m.insert(make_pair(name, info)); } else if (info == "leave") { m.eras..
[C++] 백준 14425번 - 문자열 집합 문제 14425번https://www.acmicpc.net/problem/14425 set은 중복을 없애고 삽입 순서에 상관없이 정렬한 상태로 입력된다. 이를 이용하여 집합 s 문자열들을 입력받아 set에 삽입한 후 비교해야 할 다음 문자열들과 비교해준다. find를 사용하여 비교해야 할 값들이 set에 저장되어 있다면 count해준다. 여기서 find를 이용하여 해당 값이 없다면 str.end()형태로 반환해주기 때문에 이 값이 아닐 때라는 조건을 달아야 한다. #include #include #include using namespace std;int main() { int n, m, count = 0; string s; set str; cin >> n >> m; for (int i = 0; i > ..