목록Algorithm (131)
Dolphins의 HelloWorld
Map을 사용해서 풀면 쉽게 풀리는 문제이다. https://en.cppreference.com/w/cpp/container/map 다음의 링크에서 c++ 라이브러리에서 제공하는 map에대한 설명을 볼 수 있다. map을 사용하는 방식은 java와 크게 다르지 않으며 c++에서 좋은점은 pair같은 함수를 사용해서 키에 대한 값을 한 개 이상 유지할 수 있다는 점이다. 그러한 점이 이 문제를 풀기 쉽게 만든다. 아래의 코드를 통해 더 쉽게 map의 사용을 이해할 수 있을것이다. #include #include #include using namespace std; int main() { map m; m["black"] = make_pair("0", 1); m["brown"] = make_pair("1", ..
이 문제를 풀기 위해서는 덱을 구현해야한다. 덱을 직접 구현하는것도 좋지만 이렇게 문제를 풀때는 빠르게 푸는것도 중요하므로 c++에서 제공하는 라이브러리를 사용하도록 하자. https://en.cppreference.com/w/cpp/container/deque 위의 링크에서 c++라이브러리에서 제공하는 deque에 대한 정보를 확인할 수 있다. 다음의 코드는 이것을 통해서 구현한 코드이다. #include #include #include using namespace std; int main() { deque deq; string s; int num; int N; scanf("%d", &N); while (N--) { cin >> s; if (s == "push_front") { scanf("%d", &..
위의 문제를 해결하기 위해서 나는 priority_queue(우선순위 큐)와 queue를 동시에 사용했다. priority_queue를 사용하면 가장 기본적인 포맷으로 사용했을 때 저절로 내림차순으로 큐안에서 정렬이 된다. 그래서 queue에서 가장 큰 수를 찾기위해서 priority_queue를 따로 사용하였다. 또한 queue에는 두개의 값을 동시에 넣는 pair를 이용해 문서의 위치와 문서의 중요도를 동시에 삽입하였다. priority_queue를 이용해 큐에서 가장 큰 값을 찾고 queue의 가장 앞에 있는 값과 비교를 하면서 문제를 풀어나갔다. 자세한 것은 아래의 코드와 주석을 통해서 이해하자. #include #include #include using namespace std; int main..
Stack문제와 마찬가지로 직접 Queue를 구현하기보다는 c++ 에서 제공하는 library를 제공하여 문제를 풀도록한다. https://en.cppreference.com/w/cpp/container/queue 위의 링크에서 c++라이브러리에서 제공하는 queue에 대한 정보를 확인할 수 있다. #include #include #include using namespace std; int main() { int N; //명령의 수 string s; //명령을 받을 변수 int num; //push명령을 받았을 때 push할 수를 저장하는 변수 queue q; //큐 선언 scanf("%d", &N); while (N--) { cin >> s; if (s == "push") { scanf("%d", &n..
이 문제는 순수하게 스택을 구현하는 문제이다. 이 블로그의 알고리즘 개념에 있는 것과 같이 직접 스택을 구현할 수도 있으나 빠른 시간안에 문제를 풀고자 할 때는 c++에서 제공하는 라이브러리를 이용하는것이 더 효율적이다. https://en.cppreference.com/w/cpp/container/stack 위의 사이트에서 stack 라이브러리가 제공하는 함수들과 정보들을 볼 수 있다. 아래의 코드는 stack 라이브러리를 활용한 코드이다. #include #include #include using namespace std; int main() { int N; // 명령의 수 string s; //명령어를 받는 변수 stack stack; //스택 선언 cin >> N; int num; //스택에 pu..
스택은 먼저들어간 것이 마지막에 나오는 자료구조로 흔히 LIFO(Last-in,First-out)이라고 부른다. 이 기능들을 하는 함수들을 통해 스택을 구현해보았다. 헤더파일 #ifndef __STACK_H__ #define __STACK_H__ #define SIZE 100 typedef struct _stack { int topindex; //스택의 맨위를 가르키는 변수 int arr[SIZE]; }Stack; void StackInit(Stack* stack) //스택 초기화 { stack->topindex = -1; //아무것도 없는경우 top은 -1 } void StackPush(Stack* stack, int data) { //스택에 데이터를 집어넣는 함수 stack->topindex++; /..
풀이 while (getline(cin, s)) { sentence += s; } 다음의 코드를 통해 문제가 요구하는 만큼의 문자열을 s 변수로 받아 sentence에 계속 이어붙였다. (모든 입력이 완료되면 Ctrl+Z를 통해 반복문을 빠져나올 수 있다) 문제에 있는 예제입력을 위의 코드를 통해 받으면 최종적으로 sentence = "10,20,30,50,100" 이 될것이다. ,와, 사이의 문자열을 substr 명령어로 분리해서 숫자로 바꾸고 이를 모두 더함으로써 문제를 해결하였다. #include #include using namespace std; int main() { string s; string sentence; while (getline(cin, s)) { sentence += s; } i..
String관련 알고리즘 문제를 풀 때 필요한 개념 c++ 기준으로 우리가 입력받을 때 쓰는 cin 이라던가 scanf는 한줄씩 입력받지 못하고 띄어쓰기 앞까지 입력을 받게된다. 하지만 입력을 받을 때 공백을 포함한 문자열을 입력받아야 하는 상황이 종종 일어난다.이런 문자열을 입력받기위해 사용하는 함수를 살펴보자 1. char arr[]에 받는 방식 char arr[10]; 이라고 선언된 문자형 배열에 문자열을 입력하고 싶으면 cin.getline(arr,10); 이런식으로 문자열을 받을 수 있다. getline의 매개변수중 두번째 매개변수로 들어가는 숫자는 최대 글자의 갯수로 그 숫자보다 많이 입력을 해도 오류가 나지 않고 주어진 갯수만큼만 입력을 받게된다. 2. string arr에 받는 방식 get..
풀이 우리가 기존에 하던대로 cin을 사용해서 입력을 받으면 공백을 처리하지 못하는 문제점이 생긴다. 이러한 문제점을 해결하기위해 getline을 사용한다. getline 사용법과 특징 - string에 문자열을 입력하는 방식 string str; getline(cin,str); * getline은 '\n' 전까지 저장한다. 위와같이 문자열을 받은 후 반복문을 통해 모든 문자를 검사하면 답을 도출해낼 수 있다. #include using namespace std;int main() {string str;while (getline(cin, str)) { int big = 0, small = 0, num = 0, space = 0; for (int i = 0; i = 'a' && str[i] = 'A' &&..