본문 바로가기

백준 알고리즘

백준 [2920] 음계 - 자바 풀이

반응형

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


 

 

 

처음에는 String a = new String("1 2 3 4 5 6 7 8") 으로 문자열로 만들어 입력값이 a와 같으면 ascending을 출력하면 된다 생각했으나, 입력값을 받는 sc.next()는 "1 2 3 4 5 6 7 8"이라는 문자를 입력받는 것이 아니라, 정수형의 수를 8번 입력받는 것이라 생각대로 되지 않았다.

 

결국 arr배열에 8개의 정수를 저장하고 그 값이 "1 2 3 4 5 6 7 8"의 조건에 부합하면 ascending을 출력하는 식으로 다시 생각했다.

 

import java.util.Scanner;

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

 

나누어 생각해보자.

 

int[] arr = new int[8];

for(int i=0; i<arr.length; i++) {
	arr[i] = sc.nextInt();
}
sc.close();

arr배열에 8을 넣어 길이가 8인 배열을 선언한다.

for문을 arr 배열 길이만큼 반복 실행해서 8개의 정수를 입력받는다.

 

String a = " ";
for(int i=0; i<arr.length-1; i++) {
	if(arr[i] == arr[i+1] -1) {
		a = "ascending";
	} else if(arr[i] == arr[i+1]+1) {
		a = "descending";
	} else {
		a = "mixed";
		break;
	}
}
System.out.println(a);

a를 문자열로 만들어 둔다.

arr에 들어가는 i번째 수가 그 다음 수에서 -1을 한 수와 같다면 (==) 이 배열은 오름차순으로 되어있으므로, 

a에 ascending을 저장한다.

i번째 수와 그 다음 수에서 -1한 수가 같지 않다면 else if문으로 가 조건이 참인지 본다.

arr에 있는 i번째 수가 그 다음 수에 +1을 한 값과 같다면, 이 배열은 내림차순이므로 a에 descending을 저장한다.

둘 다 참이 아니면 else문이 실행되며 a에 mixed를 저장하고 break으로 조건문을 끝낸다.

 

마지막으로 a를 출력하면 된다.

 

반응형