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를 출력하면 된다.
'백준 알고리즘' 카테고리의 다른 글
백준 [11720] 숫자의 합 - 자바 풀이 (0) | 2023.05.18 |
---|---|
백준 [11654] 아스키 코드 - 자바 풀이 (0) | 2023.05.18 |
백준 [5597] 과제 안 내신 분..? - 자바 풀이 (0) | 2023.05.17 |
백준 [2675] 문자열 반복 - 자바 풀이 (0) | 2023.05.17 |
백준 [10813] 공 바꾸기 -자바 풀이 (0) | 2023.05.17 |