목록Algorithm/baekjoon문제풀이 (70)
Dolphins의 HelloWorld
이 문제에서 가장 중요한 것은 이 문제가 스택을 이용하는 문제라는 것임을 파악하는 것이다. 스택을 이용하지 않는다면 "( [ ) ]" 이런 문자열이 나왔을 때 괄호가 대응되지 않는다는것을 나타내기가 어렵다. 그러나 스택을 쓴다면 스택의 가장 맨 위에있는 괄호가 가장 최근에 쓰여진 괄호이기 때문에 스택의 맨위에 있는것과 새롭게 들어가는 문자를 비교하면서 괄호가 대응되는지 판단하는것이 용이하다. #include #include #include using namespace std; int main() { string s; while (getline(cin, s)) { stack stk; bool b = true; if (s[0] == '.') break; for (int i = 0; i < s.length()..
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..
풀이 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..
풀이 우리가 기존에 하던대로 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' &&..
풀이 - 문자열을 받을 때 띄어쓰기 전까지 받아지는 속성을 이용하면 쉽게 구현이 가능하다. 아래는 실제 구현 코드이다.#include #include using namespace std;int main() {string s; int count = 0; while (cin >> s) { count++; } cout
풀이 - 자료형에 대한 확인이 필요하다. 이 문제에서 가장 실수하기 쉬운 오류가 string형에서 숫자로 변환할 때 int형으로 변환하는 경우이다 - string형으로 a,b,c,d를 받은 후 a와 b를 이어붙인걸 stol로 변환하고 c와 d를 이어붙인걸 변환하면 간단하게 해결된다 다음은 실제 코드로 구현한 내용이다. #include #include using namespace std;int main() {string a, b, c, d; cin >> a >> b >> c >> d; //문자로 a,b,c,d받기 cout