본문 바로가기
백준(Baekjoon)

[백준/자바] 2920번: 음계

by IT 정복가 2022. 5. 31.
728x90

https://www.acmicpc.net/problem/2920

 

2920번: 음계

다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8

www.acmicpc.net


[문제]


[코드]

import java.util.Scanner;

public class Main {

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

[설명]

1. 우선 for문을 돌려 8개의 숫자를 받는데, 그 수를 arr[i] = a;를 통해 배열에 0번째부터 7번째까지 넣어준다.

2. 수들이 차례대로 있는지 보기위해 다른 for문을 돌리는데 여기서 마지막 수는 비교할게 없기 때문에 arr.length-1까지 범위를 지정하고 돌려준다.

3. arr[i] == arr[i+1]-1 코드는 1부터 8까지 차례대로 연주했을 때 실행이 되고 cnt1를 증가 시킨다.

예를 들어 1 2 3 4 5 6 7 8을 입력했을 때

arr[0] = 1

arr[0+1] = 2 >> arr[0+1]-1 = 1...arr[6] = 7arr[6+1] = 8 >> arr[6+1]-1 = 7

 

4.  arr[i] == arr[i+1]+1 코드는 8부터 1까지 차례대로 연주했을 때 실행되고 cnt2를 증가시킨다.

예를 들어 8 7 6 5 4 3 2 1을 입력했을 때

arr[0] = 8

arr[0+1] = 7 >> arr[0+1]+1 = 8

.

.

.

arr[6] = 2

arr[6+1] = 1 >> arr[6+1]+1 = 2

5. for문을 빠져나왔을 때 cnt1값이 7이면 1부터 8까지 차례대로 연주했다는 뜻이기때문에 ascending을 출력한다.

6. cnt2값이 7이면 8부터 1까지 차례대로 연주했다는 뜻이기 때문에 descending을 출력한다.

7. 둘 다 아니면 mixed를 출력한다.


[결과]

728x90