문제
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
아이디어는 간단. 단지 우선순위 큐와 sort는 반대란 것만 less같은 경우 sort는 큰값에서 작은 값으로 가는 것이 아니고
작은 값부터 큰값으로 정렬 시키는 것이 less 하지만 우선순위 큐와 같은 경우에는 top이 가장 작은 값부터 큰값으로 가는 것은 greater이므로 반대 개념이다.
그리고 if 와 else if 같은 경우에도 if에서 해당이 되면 else if로 안 넘어 가기 때문에 둘다 false가 되는 상황이 벌어지지 않음. 주의할것
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector <int>vec;
vector <int>big;
vector <int>small;
int main(void)
{
bool check1 = true;
bool check2 = true;
for(int i = 1; i<=8; i++)
{
int a;
cin >> a;
vec.push_back(a);
big.push_back(a);
small.push_back(a);
}
sort(small.begin(),small.end(),greater<int>());
sort(big.begin(),big.end(),less<int>());
for(int i = 0; i<8; i++)
{
if(vec[i]!=big[i])
{
check1 = false;
}
if(vec[i] != small[i])
{
check2 = false;
}
}
if(check1)
{
cout<<"ascending"<<endl;
}
else if(check2)
{
cout<<"descending"<<endl;
}
else{
cout<<"mixed"<<endl;
}
}
'Algorithm' 카테고리의 다른 글
백준 1411번 비슷한 단어 (0) | 2019.08.24 |
---|---|
백준 1919번 애너그램 만들기 (0) | 2019.08.24 |
백준 2847번 게임을 만드는 동준이 (0) | 2019.08.22 |
백준 알고리즘 2864번 5와 6의 차이 (0) | 2019.08.17 |
백준 3986번 좋은단어 (0) | 2019.08.14 |