본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-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, mixed 중 하나를 출력한다.


예제 입력

1 2 3 4 5 6 7 8


예제 출력

ascending


내 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main{
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        try {
            String[] scals = br.readLine().split(" ");
//          음계를 입력 받습니다.
            String[] strScals = new String[2];
            strScals[0] = "12345678";
            strScals[1] = "87654321";
//          입력 받을 데이터를 알고 있으므로 비교 할 데이터를 선언합니다.
            
            boolean ascending = true;
            boolean descending = true;
//          비교 여부를 확인 할 변수들을 선언합니다.
            for(int i = 0; i < scals.length; i++) {
//              음계 만큼 반복합니다.
                 if(!scals[i].equals(String.valueOf(strScals[0].charAt(i)))) {
                     ascending = false;
                 }
//               ascending 음계와 하나라도 다르다면 거짓으로 변경합니다.
                 if(!scals[i].equals(String.valueOf(strScals[1].charAt(i)))) {
                     descending = false;
                 }
//               descending 음계와 하나라도 다르다면 거짓으로 변경합니다.
                 if(!ascending && !descending){
                     break;
                 }
//               asceding과 descending이 모두 거짓이라면 반복문을 종료합니다.
            }
            if(ascending) {
                bw.write("ascending");
            }else if(descending) {
                bw.write("descending");
            }else {
                 bw.write("mixed");
             }
//          참인 내용을 출력하고 참이 없다면 "mixed"를 출력합니다.
            bw.flush();
            bw.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


내 풀이 해석

이미 정답을 알고 있으므로 정답을 배열로 선언합니다.
선언 한 배열과 입력 받은 값과 하나씩 비교 하고 하나라도 다르면 거짓으로 변경합니다.
ascending과 descending이 모두 거짓이라면 반복문을 멈춥니다.
거짓 여부를 판단하여 출력합니다.


반응형