Coding/BOJ
[BOJ 백준] 2920 - 음계 (C++)
Dev_Klare
2023. 11. 9. 00:35
문제 바로가기
https://www.acmicpc.net/problem/2920
관련 알고리즘
- 해당 없음
정답 및 해설
입력받은 숫자들이 차례대로 나열되어 있는지 묻는 문제이다.
간단한 구현문제이기때문에 풀이가 다양하게 나올 수 있다.
필자의 경우 type 이라는 배열을 선언하여 앞뒤 숫자의 관계를 파악하여 배열에 저장했다.
그 후 조건문을 사용하여 입력받은 수열의 맞게 출력하여 해결하였다.
C++
더보기
#include<iostream>
using namespace std;
int main(){
int a,b,type[2]={0};
for(int i=0; i<8; i++){
cin>>b;
if(i==0){a=b; continue;}
if(b==a+1) type[0]++;
else if(b==a-1) type[1]++;
a=b;
}
if(type[0]==7)
cout<<"ascending";
else if(type[1]==7)
cout<<"descending";
else
cout<<"mixed";
}
Line | 해설 |
4 | 입력받은 숫자를 담을 변수 a,b와 앞뒤숫자들의 관계를 저장할 배열 type[2]을 선언했다. type배열은 type[0]는 (앞뒤관계가) 오름차순인 횟수, type[1]은 내림차순인 횟수이다. |
5~11 | for 문을 통해 8번 반복하며 숫자를 입력받고 앞뒤숫자들의 관계를 파악한다. |
7 | 처음으로 입력받은 수는 비교대상이 없기때문에 a=b로 다음 숫자와 비교할 준비만 해놓고 다음 반복문으로 이동한다. |
8~10 | a(이전 수)와 b(지금 수)간의 관계에 따라 type 배열에 값을 더해준다. b==a+1 즉 지금 수가 이전 수+1인 경우 (a=1, b=2) 오름차순 정렬이므로 type[0]에 1을 더해주고, b==a-1 지금 수가 이전 수-1인 경우 (a=2, b=1) 내림차순 정렬이므로 type[1]에 1을 더해준다. 마지막 줄에서 a=b로 '지금 수'를 '다음 연산에 이용할 이전 수'로 설정해주었다. |
11~16 | 조건문을 통해 결과를 출력한다. type[0]==7 이면 숫자들이 모두 오름차순으로 정렬되어 있다는 뜻이므로 "ascending"을 출력하고, type[1]==7 이면 숫자들이 모두 내림차순으로 정렬되어 있다는 뜻이므로 "descending"을 출력한다. 둘 다 아닌 경우 "mixed"를 출력하여 정답을 구한다. |