백준 - 2920번 음계

phoenixKim·2021년 9월 15일
0

백준 알고리즘

목록 보기
17/174

첫번째 소스코드

#include <iostream>
#include <vector>
using namespace std;


//12:52
int main(void) 
{
	vector<int>v(8, 0);

	for (int i = 0; i < v.size(); i++)
	{
		cin >> v[i];
	}
	
	bool check = false;
	//오름차순
	if (v[0] == 1)
	{
		for (int i = 0; i < v.size() - 1; i++)
		{
			if (v[i] > v[i + 1])
			{
				check = true;
				break;
			}		
		}

		if (check == false)
		{
			cout << "ascending" ;
		}
		else
			cout << "mixed" ;

	}
	//내림차순
	else if (v[0] == 8)
	{
		for (int i = 0; i < v.size() - 1; i++)
		{
			if (v[i] < v[i + 1])
			{
				check = true;
				break;
			}
			
		}
		if (check == false)
		{
			cout << "descending" ;
		}
		else
			cout << "mixed" ;

	}

	
}

=> 효율성이 떨어진다.

불변수 두개를 추가해서 변경하자.

  • 불변수 두개를 사용해서 오름인지, 내림인지 ,mixed인지 구별이 가능하다.

어차피 들어오는 값 8개 중에서 2개를 비교하는 것이므로 내가 한 요 부분을 통일시키자.

  • 내림차순과 오름차순 변수를 모두 true로 하고,
    오름차순 조건에서 반대로 동작할 경우에는 오름차순 변수를 false로 변경하고,
    내림차순 조건에서 반대로 동작할 경우에는 내림차순 변수를 false로 변경하고,
    두개의 변수가 모두 false일 경우에는 혼합이라는 것을 알수 있다.

변경된 코드

#include <iostream>
#include <vector>
using namespace std;


//12:52
int main(void) 
{
	vector<int>v(8, 0);

	for (int i = 0; i < v.size(); i++)
	{
		cin >> v[i];
	}
	
	bool bdescend = true;
	bool bascend = true;


	for (int i = 0; i < v.size() - 1; i++)
	{
		if (v[i] > v[i + 1])
		{
			bascend = false;
		}
		else if (v[i] < v[i + 1])
		{
			bdescend = false;
		}
	}

	if (bascend)
		cout << "ascending";
	else if (bdescend)
		cout << "descending";
	else if (bascend == false && bdescend == false)
		cout << "mixed";

}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보