본문 바로가기
[ 다먹살 ]/- Coding

[백준] 2920 음계

by 엉망으로살기 2021. 11. 4.
반응형

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

 

배열을 직접적으로 assign(=)해서 사용하게 되면, 둘 중 한 개만 배열 값 변화가 일어나도 나머지 한 개까지 전부 변하게 된다. 아마 값을 복사하는 게 아니라 배열이 가리키는 참조값(주소)를 그대로 복사해오기 때문일 것이다. 따라서 clone() 메소드를 이용해 값을 복사해준 후 오름차순과 내림차순에 대한 체크를 따로따로 해준 후 문제를 해결하였다.


문제 및 입출력


코드

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        Integer[] melody = new Integer[8];
        
        for(int i=0; i<8; i++)
        {
            melody[i] = sc.nextInt();
        }
        
        // 오름차순과 내림차순을 체크할 수 있는 배열, 변수를 각각 설정
        Integer[] isAsc = melody.clone();
        Integer[] isDesc = melody.clone();
        boolean chkAsc = true;
        boolean chkDesc = true;
        
        Arrays.sort(isAsc);
        Arrays.sort(isDesc, Collections.reverseOrder());
        
        // 오름차순 배열값과 다른 지 체크
        for(int i=0; i<melody.length; i++)
        {
            if(melody[i]!=isAsc[i])
            {
                chkAsc = false;
                break;
            }
        }
        // 내림차순 배열값과 다른 지 체크
        for(int i=0; i<melody.length; i++)
        {
            if(melody[i]!=isDesc[i])
            {
                chkDesc = false;
                break;
            }
        }
        
        // 체크결과 2개를 조합해 결과값 출력
        System.out.println(chkAsc?"ascending":chkDesc?"descending":"mixed");
        sc.close();
    }
}

 

반응형

댓글