본문 바로가기
프로그램/C언어 1000제

C언어 163제] 2009/2010 COCI 크로아티아 정보학 공개 경쟁 #1 음계

by 건티 2024. 9. 12.
728x90

출처 : 반크_세계유산 경복궁

 

문제]

다장조는 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

 


출처 : 백준_2920번

 

참고풀이]

#include <stdio.h>

int main()
{
   int InSu[8]={0};//8개의 숫자를 입력받는다. 
   int i,j;//인덱스 또는 반복변수
   int chk;//ascending:1, descending:8, mixed=5으로 설정한다.
   int count[9]={0};//입력수 중복여부 체크 
   int sw;//증감체크하는 변수 

   //8개의 숫자를 입력받는다. 
   for(i=0;i<8;i++)
      scanf("%d",&InSu[i]);
   //1~8까지의 숫자가 한 번씩 등장한다. 숫자의 중복여부 체크
   for(i=0;i<8;i++)
      count[InSu[i]]++;
   for(i=1;i<=8;i++)
      if(count[i]==1) chk=1;
      else{
         chk=0; break;
      }

   //음계의 순서여부를 체크한다.
   if(chk)
   {
      chk=(InSu[0]==1) ? 1 : (InSu[0]==8) ? 8 : 5;
      sw=(InSu[0]==1) ? 1 : (InSu[0]==8) ? -1 : 0;
      if(sw==0) printf("mixed");
      else
      {
         for(i=1;i<8;i++)
         {
            chk+=sw;
            if(chk!=InSu[i])
            {
               sw=0;
               printf("mixed");
               break;
            }
         }
         if(i==8)
            if(sw==1) printf("ascending");
            else printf("descending");
      }
   }

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 봄

 

반응형

댓글