[백준 BOJ] 20001번 고무오리 디버깅 (C++/cpp)

2022. 2. 17. 19:37PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/20001

 

20001번: 고무오리 디버깅

백준 문제 풀이에 힘들어하는 수진이를 위해 민우는 문제해결에 도움이 되는 고무오리를 준비했다. 민우가 준비한 고무오리는 신비한 능력이 존재하는데, 최근에 풀던 백준 문제를 해결해주는

www.acmicpc.net

백준 BOJ 20001번 고무오리 디버깅 문제 사진
백준 BOJ 20001번 고무오리 디버깅 문제 사진2

 

접근 방법 - 스택을 이용한 연산 문제

백준의 20001번 문제는 스택을 이용하여 해결해야 하는 문제이다.

해당 문제는, "고무오리"와 "문제"만으로 이루어져 있는 입력값에 대하여, 문제를 모두 해결할 수 있는지에 대한 여부를 구해야 하는 문제이다.

(문제에 대한 자세한 설명은 위를 참고하길 바란다.)

필자는 문제의 흐름대로 코드를 작성하였는데, 스택에 대해 알고 있다면 쉽게 풀 수 있는 문제로 예상된다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

만일 스택을 어떻게 활용해야할지 잘 모르겠다면 아래의 설명을 참고하길 바란다.

 

코드의 실행 순서

1) 스택을 선언한다.

 

2) 반복문을 실행하여, 각 문자열의 입력을 받아낸다. 그리고 이에 따른 연산을 취한다.

- "고무오리 디버깅 시작"을 입력받았다면, 별다른 연산을 수행하지 않고 continue문을 통해 다른 문자열을 입력받는다.

- "고무오리 디버깅 끝"을 입력받았다면, break문을 통해 해당 반복문을 빠져나온다.

- "문제"를 입력받았다면, 스택에 1을 push한다.

- "고무오리를 입력받았다면, 스택이 비어있는지 확인한다. 비어있다면 1을 2번 push한다. 비어있지 않다면 해당 스택에 대해 pop한다.

(여기서, 스택에 넣어지는 값은 어떤 값이어도 상관없다. 필자는 임의로 1을 지정하여 연산을 수행하였다.)

 

3) 반복문이 모두 실행되었다면, 스택이 비어있는지 확인한다.

- 비어있지 않다면 모든 문제를 해결하지 못했다는 뜻이다. 이 경우엔, "힝구"를 출력한다.

- 비어있다면 모든 문제를 해결하였다는 뜻이다. 이 경우엔, "고무오리야 사랑해"를 출력한다.

 

4) 출력이 완료되었다면 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <stack>
#include <string>
using namespace std;

//백준 20001번 코드
int main() {
	stack<int> s;
	while (1) {
		string ch;
		getline(cin, ch);
		if (ch == "고무오리 디버깅 시작") { continue; }
		else if (ch == "고무오리 디버깅 끝") { break; }
		else if (ch == "문제") {
			s.push(1);
		}
		else if (ch == "고무오리") {
			if (s.empty()) {
				s.push(1);	s.push(1);
			}
			else {
				s.pop();
			}
		}
	}

	if (!s.empty()) { cout << "힝구" << endl; }
	else { cout << "고무오리야 사랑해" << endl; }
}

 

제출 결과

백준 BOJ 20001번 고무오리 디버깅 문제 C++ 제출 결과

(2022.01.17 백준 20001번 문제 제출 결과)

반응형