본문 바로가기
백준

[백준] 2920번 : 음계 – JAVA [자바]

by Hongwoo 2022. 7. 15.
반응형

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

 


  • 문제

 

 


  • 문제 풀이

백준 2920번 음계는 브론즈 브론즈 2 난이도의 구현 문제이다. 이 문제에서는 8개의 숫자가 주어진다. 만약에 1부터 8까지 연속으로 주어지면 ascending을, 8부터 1까지 연속으로 주어지면 descending을, 둘 다 아니면 mixed를 출력하면 되는 문제이다. 

 

이 문제는 되게 간단하게 풀 수 있다. 우선 배열 arr에 주어지는 숫자들을 입력받는다. 그리고 boolean형 변수 asc과 dsc을 true로 선언한다. 만약에 asc이 true면 ascending을 출력하고 dsc이 true면 descending을 출력하고 둘 다 false이면 mixed를 출력한다.

 

이제 for-loop을 int i = 0부터 i < 8까지 돌린다. 그리고 다음 숫자가 현재 숫자보다 크면 dsc을 false로 바꿔준다. 왜냐하면 다음 숫자가 현재 숫자보다 더 크기 때문에 연속으로 증가하지 않기 때문이다. 마찬가지로 다음 숫자가 현재 숫자보다 작으면 asc을 false로 바꿔준다.

 

for-loop이 끝나고 asc이 true면 ascending을 출력해주고 dsc이 true면 descending을 출력해준다. 그리고 둘 다 false면 mixed를 출력해준다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[8];  //배열 선언
        StringTokenizer st = new StringTokenizer(br.readLine());
        //배열에 입력받기
        for (int i = 0; i < 8; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        boolean asc = true;
        boolean dsc = true;
        for (int i = 0; i < 7; i++) {
            //다음 숫자가 더 크면 descending은 안 된다
            if (arr[i+1] > arr[i]) dsc = false;
            //다음 숫자가 더 작으면 ascending은 안 된다
            if (arr[i+1] < arr[i]) asc = false;
        }
        if (asc) {
            System.out.print("ascending");
        } else if (dsc) {
            System.out.print("descending");
        } else {
            //asc, dsc 둘 다 아니면 mixed 출력
            System.out.print("mixed");
        }
    }
}

 

 

반응형

댓글