출처
백준 온라인 저지
https://www.acmicpc.net/problem/2920
문제
다장조는 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의 출력 결과는 정해져 있습니다.
'1 2 3 4 5 6 7 8'의 텍스트로 입력을 받으면 ascending의 문자가 '8 7 6 5 4 3 2 1'의 입력 값이라면 descending를 출력시켜주고 둘 다 해당하지 않을 시 mixed를 출력해주면 되는 문제입니다.
코드
const input = require('fs').readFileSync('/dev/stdin').toString().trim();
const result = {
'1 2 3 4 5 6 7 8': 'ascending',
'8 7 6 5 4 3 2 1': 'descending'
}[input];
console.log(result || 'mixed');
다른 방식
처음 문제를 읽고서 반복문으로 숫자 크기 비교로 문제를 해결해야겠다는 생각을 가지고 있었고 이를 구현한 코드입니다.
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(" ");
let count = 0;
for (let i = 0; i < 7; i++){
if (input[i] < input[i+1]) {
count++;
}
}
const result = {
0: 'descending',
7: 'ascending',
}[count];
console.log(result || 'mixed');