본문 바로가기

알고리즘(C++)/백준 알고리즘

[백준] C++ 2920번 : 음계

풀이과정


입력받은 숫자들을 int type vector에 저장하고 vector의 맨 뒤 값(size-1)과 그 이전값(size-2)을 비교한다.

맨 뒤 값 - 1 == 그 이전값을 비교하여 참일 경우 pop_back을 하여 vector의 size가 0이 된다면 "ascending"을 출력하고 거짓일 경우 검사를 중단하고 "mixed"을 출력한다.

맨 뒤 값 + 1 == 그 이전값을 비교하여 참일 경우 pop_back을 하여 vector의 size가 0이 된다면 "descending"을 출력하고 거짓일 경우 검사를 중단하고 "mixed"을 출력한다.

코드


풀이1 

더보기
#include <iostream>
#include <vector>
#include <string>

using namespace std;

string CheckData(vector<int> v)
{
	int check = 0; // -1 : descending, 0 : mixed, 1 : ascending
	string Result = "";
	vector<int> v1 = v;
	for (int i = v1.size()-1; i >= 0; --i) 
	{
		if (v1.at(i) == i + 1)
			v1.pop_back();
	}
	if (v1.size() == 0) check = 1;

	v1 = v;
	for (int i = v.size() - 1; i >= 0; --i)
	{
		if (v.at(i) == 8- i)
			v.pop_back();
	}
	if (v.size() == 0) check = -1;
	if (check == 1)
		Result = "ascending";
	else if(check == -1)
		Result = "descending";
	else
		Result = "mixed";

	return Result;
}
int main()
{
	vector<int> v;
	v.reserve(8);
	for (int i = 0; i < 8; ++i)
	{
		int input = 0;
		cin >> input;
		v.push_back(input);
	}

	cout << CheckData(v) << endl;
    return 0;
}

 

풀이2

더보기
#include <iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v;

	for (int i = 0; i < 8; ++i) {
		int iNum = 0;
		cin >> iNum;
		v.push_back(iNum);
	}
	if (v.at(v.size() - 1) == 8)
	{
		while (v.size() != 0)
		{
			int curr = v.size() - 1;
			if (curr > 0 && v.at(curr) - 1 == v.at(curr - 1)) v.pop_back();
			else break;

			if (v.size() == 1) v.pop_back();
		}
		if (v.size() == 0) cout << "ascending" << endl;
		else cout << "mixed" << endl;

	}
	else if (v.at(v.size() - 1) == 1)
	{
		while (v.size() != 0)
		{
			int curr = v.size() - 1;
			if (curr > 0 && v.at(curr) + 1 == v.at(curr - 1)) v.pop_back();
			else break;

			if (v.size() == 1) v.pop_back();
		}
		if (v.size() == 0) cout << "descending" << endl;
		else cout << "mixed" << endl;
	}
	else {
		cout << "mixed" << endl;
	}
	return 0;
}