Algorithm/c++ 10

[c++/백준 24511] queuestack

문제 한가롭게 방학에 놀고 있던 도현이는 갑자기 재밌는 자료구조를 생각해 냈다. 그 자료구조의 이름은 queuestack이다. queuestack의 구조는 다음과 같다. 1번, 2번, ... , N번의 자료구조(queue 혹은 stack)가 나열되어 있으며, 각각의 자료구조에는 한 개의 원소가 들어있다. queuestack의 작동은 다음과 같다. x0을 입력받는다. x0을 1번 자료구조에 삽입한 뒤 1번 자료구조에서 원소를 pop한다. 그때 pop 된 원소를 x1이라 한다. x1을 2번 자료구조에 삽입한 뒤 2번 자료구조에서 원소를 pop한다. 그때 pop 된 원소를 x2이라 한다. ... xN−1을 N번 자료구조에 삽입한 뒤 N번 자료구조에서 원소를 pop한다. 그때 pop 된 원소를 xN이라 한다. ..

Algorithm/c++ 2023.01.20

[c++/백준 2164] 카드2

문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다. N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그..

Algorithm/c++ 2023.01.10

[c++/백준 10828] 스택

문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 접근 명령의 수를 입력받아 그만큼 반복문을 돌리며, 조건문을 이용하여 모든 명령에 대해 반응할 수 있도록 코드를 작성한다. 코드 #include #include using namespac..

Algorithm/c++ 2023.01.09

[c++/백준 10845] 큐

문제 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여섯 가지이다. push X: 정수 X를 큐에 넣는 연산이다. pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 큐에 들어있는 정수의 개수를 출력한다. empty: 큐가 비어있으면 1, 아니면 0을 출력한다. front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다 접근 명령의 수를 입력받아 그만큼 반복문을 돌리며, 조건문을 이용하여 모든 명령에 대해 반..

Algorithm/c++ 2023.01.09

[c++/백준 10825] 국영수

문제 도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오. 국어 점수가 감소하는 순서로 국어 점수가 같으면 영어 점수가 증가하는 순서로 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.) 접근 국어와 수학은 내림차순, 영어와 이름은 오름차순 정렬이다. sort는 기본으로 오름차순 정렬이니 국어와 수학점수에 -1을 곱하여 벡터에 넣어 정렬해준다. 점수와 이름을 서로 다른 벡터에 넣는다. 점수는 국, 영, 수 순서로 넣는다. 이름을 먼저 오름차순으로 정렬하고, 점수를 담은 벡터에..

Algorithm/c++ 2023.01.09

[c++/백준 10814] 나이순 정렬

문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 접근 정수형 변수를 만들어 회원의 수를 입력받는다. 회원의 정보를 담을 벡터를 만든다. 회원의 수만큼 반복하여 그들의 나이와 이름을 pair로 하여 벡터에 담는다. 나이로만 정렬하여 출력한다. 코드 #include #include #include #include using namespace std; bool compare(paira, pairb){ return a.first > n; vector v; whil..

Algorithm/c++ 2023.01.07

[c++/백준 11650] 좌표 정렬하기

문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 접근 점의 개수, 점의 x좌표, y좌표를 받을 정수형 변수 3개를 만든다. 점의 위치를 저장할 벡터를 만든다. 점의 개수만큼 반복하며 점의 x, y 좌표를 한쌍으로 하여 벡터에 저장한다. 증가하는 순으로 정렬이면 오름차순이니 벡터를 sort함수를 이용하여 정렬해 출력한다. 코드 #include #include #include #include using namespace std; int main() { int n, x, y; cin >> n; vector v; while(n--){ cin >>x>>y; v.push_back(make_pair(x..

Algorithm/c++ 2023.01.07

[c++/백준 11931] 수 정렬하기 4

문제 N개의 수가 주어졌을 때, 이를 내림차순으로 정렬하는 프로그램을 작성하시오. 접근 정수형 변수를 만들어 N을 입력받는다. N번만큼 수를 벡터 또는 큐에 입력받아 정렬시킨 후 모두 출력한다. 무슨 방법으로 코드를 짜면 좋을까 고민이 많았다. 우선순위 큐를 이용하여 입력하는 족족 정렬되게 하기, 벡터를 이용하여 모든 수를 다 받은 다음에 sort함수로 정렬하기. 벡터를 이용한다면 모든 수에 -1을 곱하여 벡터에 입력받아 정렬한 다음에 -1을 곱하며 출력하기, 또는 정렬한 다음에 거꾸로 뒤집기. 벡터에서는 출력할 때 인덱스를 이용하거나 반복자, 또는 역반복자를 이용하여 출력하기.. 이것저것 작성해본 결과, 초보인 나에게 쉬우면서도 빠른 코드는 아래와 같다. 코드 #include #include #incl..

Algorithm/c++ 2023.01.07

[c++/백준 9086] 문자열

문제 문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하시오. 접근 정수형 변수를 만들어 테스트 케이스의 개수를 입력받는다. 문자열형 변수를 만든다. 테스트 케이스의 개수만큼 반복하며 문자열형 변수에 입력받고, 문자열의 처음 인덱스에 있는 글자와 마지막 인덱스에 있는 글자를 출력한다. 코드 #include using namespace std; int main() { int t; cin >> t; string word; while(t--){ cin >> word; cout

Algorithm/c++ 2023.01.06