문 제
다장조는 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까지 숫자가 한 번씩 등장한다.
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
8 1 7 2 6 3 5 4
출 력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
ascending
descending
mixed
코 드
using System;
using System.Linq;
using static System.Console;
namespace algorithm
{
class Program
{
public enum eType : byte
{
ascending,
descending,
mixed,
None
}
static void Main(string[] args)
{
string[] input = new string[8];
input = ReadLine().Split(' ');
int[] inputNum = input.Select(int.Parse).ToArray();
eType type = CheckType(inputNum[0], inputNum[1]);
switch (type)
{
case eType.mixed:
break;
case eType.ascending:
case eType.descending:
type = CheckType(type, inputNum);
break;
}
Write(type.ToString());
}
static eType CheckType(int A, int B)
{
if (Math.Abs(A - B) > 1)
return eType.mixed;
else if (A > B)
return eType.descending;
else if (A < B)
return eType.ascending;
return eType.None;
}
static eType CheckType(eType type, int[] inputNum)
{
for (int i = 2; i < inputNum.Length; i++)
{
eType tempType = CheckType(inputNum[i - 1], inputNum[i]);
if (type != tempType)
{
type = tempType;
break;
}
}
return type;
}
}
}
비교코드 - 1
Linq를 이용하여 엄청 간단하게 풀어버렸다..
using System;
using System.Linq;
using static System.Console;
namespace algorithm
{
class Program
{
static void Main(string[] args)
{
int[] ascending = Enumerable.Range(1, 8).ToArray();
int[] descending = Enumerable.Range(1, 8).Reverse().ToArray();
int[] input = ReadLine().Split().Select(int.Parse).ToArray();
if (input.SequenceEqual(ascending))
Write("ascending");
else if (input.SequenceEqual(descending))
Write("descending");
else
Write("mixed");
}
}
}
공 부
Enumerable 클래스
- System.Linq : LINQ 쿼리 사용
- ‘비교코드 - 1’ 중
- Enumerable.Range(A, B) : 특정 범위 숫자 집합을 만들 때 사용, A부터 B까지 숫자 집합 int 배열로 만듦.
- input.SequenceEqual(input타입) : 두 시퀀스에 동일한 수의 데이터가 존재하고 동일한 순서로 정렬되어 있는 경우 TRUE 반환, 아닌 경우 FALSE 반환