본문 바로가기

알고리즘 문제풀이/백준

[BOJ][JAVA] 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

 

 

문제

 

설명

비교적 간단한 문제인데, 처음에 필요 이상으로 복잡하게 생각을 해서 좀 길게 코드를 짰습니다.

처음 버전과 간단히 리팩토링한 버전을 차례로 올립니다. 

 

그리고 이 둘보다 더 간단하게도 풀 수 있습니다. 너무 간단해서 그냥 말로만 설명드리자면, 

그냥 입력값 8개를 배열에 차례로 저장한 다음에 그 배열이 1, 2, 3, 4, 5, 6, 7, 8로 이루어져 있으면 ascending을 출력하고 8, 7, 6, 5, 4, 3, 2, 1로 이루어져 있으면 descending을 출력하면 됩니다. 만약 그 두 경우가 아니라면 모두 mixed를 출력하면 끝입니다.

 

코드

 

1. (굳이) 복잡하게 짠 버전

import java.util.Scanner;

//음계 문제
public class Scale {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[8];
		// sort 사용! 오름차순과 같으면 ascending, 내림차순과 같으면 descending, else면 mixed!
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.nextInt();
		}
		sc.close();
		
		int flag; // 0 : ascending, 1: descending, 2:mixed
		
		int first_diff=arr[1]-arr[0];
		
		int i=1;
		
		if(first_diff==1) {
			flag=0; //ascending으로 set.
			while(i<7) {
				int diff = arr[i+1]-arr[i];
				if(diff!=1) { //하나라도 안 맞으면 바로 mixed
					flag=2;
					break;
				}
				i++;
			}
		}
		else if(first_diff==-1) {
			flag=1; //descending으로 세팅
			while(i<7) {
				int diff = arr[i+1]-arr[i];
				if(diff!=-1) {
					flag=2;
					break;
				}
				i++;
			}
		}
		else
			flag=2;
		
		if(flag==0) System.out.println("ascending");
		else if(flag==1) System.out.println("descending");
		else System.out.println("mixed");
	}	
}

 

 

2. 좀 더 간단한 버전

import java.util.Scanner;

public class BOJ_2920_1 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int[] arr = new int[8];
		
		for(int i=0; i<8; i++)
			arr[i]=sc.nextInt();
		sc.close(); //입력값 받기 완료
		
		int asc=1;
		int dsc=8;
		
		for(int i=0; i<8; i++) {
			if(arr[i]==asc)
				asc++;
			if(arr[i]==dsc)
				dsc--;
		}
		
		if(asc==9) System.out.println("ascending");
		else if(dsc==0) System.out.println("descending");
		else System.out.println("mixed");
			
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[BOJ][JAVA] 9012 - 괄호  (0) 2021.09.21
[BOJ][JAVA] 1120 - 문자열  (0) 2021.09.18
[BOJ][JAVA] 3109 - 빵집  (0) 2021.09.17
[BOJ][JAVA] 2630 - 색종이 만들기  (0) 2021.09.13
[BOJ][JAVA] 1987 - 알파벳  (0) 2021.09.12