본문 바로가기

코딩 테스트

[백준] (2920번) 음계

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 중 하나를 출력한다.

 

 

- 입력 예시 -

 

// (case 1)
1 2 3 4 5 6 7 8

// (case 2)
8 7 6 5 4 3 2 1

// (case 3)
8 1 7 2 6 3 5 4

 

출력 예시  -

 

// (case 1)
ascending

// (case 2)
descending

// (case 3)
mixed

정답 코드


<  내 정답 코드  >

 

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

public class Main {
    static final String[] ASCENDING = {"1", "2", "3", "4", "5", "6", "7", "8"};
    static final String[] DESCENDING = {"8", "7", "6", "5", "4", "3", "2", "1"};
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] cMjor = bf.readLine().split(" ");

        String firstScale = cMjor[0];
        String result = "";

        if (ASCENDING[0].equals(firstScale)) {
            result = checkAscending(cMjor);
        } else if (DESCENDING[0].equals(firstScale)) {
            result = checkdescending(cMjor);
        } else {
            result = "mixed";
        }

        System.out.println(result);
    }

    public static String checkAscending(String[] cMjor) {
        for (int i = 1; i < cMjor.length; i++) {
            if (!cMjor[i].equals(ASCENDING[i])) {
                return "mixed";
            }
        }
        return "ascending";
    }

    public static String checkdescending(String[] cMjor) {
        for (int i = 1; i < cMjor.length; i++) {
            if (!cMjor[i].equals(DESCENDING[i])) {
                return "mixed";
            }
        }
        return "descending";
    }
}

 

<  타인 답변 코드  >

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] inputs = new int[8];
		for (int i = 0; i < inputs.length; i++) {
			inputs[i] = sc.nextInt();
		}
		sc.close();
		
		String output = "";
		for (int i = 0; i < inputs.length - 1; i++) {
			if (inputs[i] == inputs[i + 1] - 1) {
				output = "ascending";
			} else if (inputs[i] == inputs[i + 1] + 1) {
				output = "descending";
			} else {
				output = "mixed";
				break;
			}
		}
		System.out.println(output);
	}
}

이것을 주의하자!


-  타인 코드를 보면, 배열을 만들어서 사용자가 입력한 값을 순서대로 넣는다. 그리고 for문을 돌려 i 번째 인자와 i + 1 인자가 동일한지 아닌지 판별해서 결과를 도출한다. 신박하다.

 

-  나는 따로 배열을 만들어서 비교하는 식으로 구현했다.

'코딩 테스트' 카테고리의 다른 글

[백준] (9498번) 시험 성적  (2) 2022.11.19
[백준] (8958번) OX퀴즈  (0) 2022.11.19
[백준] (2884번) 알람 시계  (0) 2022.11.19
[백준] (2753번) 윤년  (0) 2022.11.19
[백준] (2525번) 오븐 시계  (0) 2022.11.19