문제
다장조는 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 중 하나를 출력한다.
예제 입력 1
1 2 3 4 5 6 7 8
예제 출력 1
ascending
예제 입력 2
8 7 6 5 4 3 2 1
예제 출력 2
descending
예제 입력 3
8 1 7 2 6 3 5 4
예제 출력 3
mixed
#문제 풀이 방법
1.
8개 숫자가 입력되고
이 숫자들이
선형적으로 상승곡선을 그리는지,
하강곡선을 그리는지,
비선형적인지 파악하여 출력.
(음계 얘기는 사실 하나도 필요없어 보인다.눈속임...?)
2-1. 숫자들이 관계를 파악하기 위해
각각의 숫자가
+1씩 차이나는지,
-1씩 차이나는지,
다르게 차이나는지 확인한다.
2-2.
1~8까지 8자리 밖에 안 되므로 일일이 비교하는 것도 가능할 것이다.
반응형
#C/C++
처음에 문제 풀었을 때는 아무생각없이 구현만 하자는 느낌으로 아무생각없이 풀었다.
그랬더니 아래와 같이 좀 지저분한 코드가 나온 것 같다.(답은 맞았지만......)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[8];
for(int i=0;i<8;i++)
{
scanf("%d",&a[i]);
}
if(a[0]==8)
{
for(int i=0;i<8;i++)
{
if(a[i]!=8-i)
{
printf("mixed");
return 0;
}
}
printf("descending");
return 0;
}
else if(a[0]==1)
{
for(int i=0;i<8;i++)
{
if(a[i]!=i+1)
{
printf("mixed");
return 0;
}
}
printf("ascending");
return 0;
}
else
{
printf("mixed");
return 0;
}
return 0;
}
그래서 위의 문제풀이방법을 통해 정리해서 다시 쳐보았다.
#include <iostream>
using namespace std;
int main()
{
int a,b,c;//비교할 숫자 a, 입력받는 숫자b, 차이값 c
bool t=true;
cin>>a>>b;//처음 두 숫자 입력
c=a-b;//처음 두 숫자의 차이
a=b;//두번째 숫자를 a로 저장
while(cin>>b)//그다음 숫자들을 입력받음.
{
if(a-b!=c)
{
t=false;
cout<<"mixed";
break;
}
a=b;//입력받은 숫자 a로 옮김.
}
if(t&&c==1) cout<<"descending";
if(t&&c==-1) cout<<"ascending";
return 0;
}
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);//한 줄 다 입력받기
if(!s.compare("1 2 3 4 5 6 7 8")) cout<<"ascending";
else if(!s.compare("8 7 6 5 4 3 2 1")) cout<<"descending";
else cout<<"mixed";
return 0;
}
#Python
ls=list(map(int,input().split()))
t=True
a=ls[1]-ls[0]
for i in range(len(ls)-1):
if ls[i+1]-ls[i]!=a:
print("mixed")
t=False
break
if t and a==1:
print("ascending")
if t and a==-1:
print("descending")
s=input()
if s=="1 2 3 4 5 6 7 8":
print("ascending")
elif s=="8 7 6 5 4 3 2 1":
print("descending")
else:
print("mixed")
반응형
'PS > 백준' 카테고리의 다른 글
[백준/Baekjoon]<8958번> OX퀴즈 [C/C++/Python][Class 1] (1) | 2022.09.15 |
---|---|
[백준/Baekjoon]<3052번> 나머지 [C/C++/Python][Class 1] (2) | 2022.09.13 |
[백준/Baekjoon]<1152번> 단어의 개수 [C/C++/Python][Class 1] (2) | 2022.09.12 |
[백준/Baekjoon]<2908번> 상수 [C/C++/Python][Class 1] (0) | 2022.08.03 |
[백준/Baekjoon]<2675번> 문자열 반복 [C/C++/Python][Class 1] (0) | 2022.08.02 |