문제
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String b = scanner.nextLine();
String[] c = b.split(" ");
int[] a = new int[8];
for (int i = 0; i < c.length; i++) {
a[i] = Integer.parseInt(c[i]);
}
String res = "";
int sum = 0;
int sum2 = 0;
for (int i = 0; i < 8; i++) {
if (a[i] == i+1){
sum++;
} else if (a[i] == 8-i) {
sum2++;
}
}
if (sum == 8){
System.out.println("ascending");
} else if (sum2 == 8) {
System.out.println("descending");
} else {
System.out.println("mixed");
}
}
}
1.
string b로 숫자를 입력 받은 후 for문을 이용해 int 배열로 바꿔넣어준.
String b = scanner.nextLine();
String[] c = b.split(" ");
int[] a = new int[8];
for (int i = 0; i < c.length; i++) {
a[i] = Integer.parseInt(c[i]);
}
2.
"ascending"일 경우 카운트 +1 해줄 변수와 "descending" 일 경우 카운트 +1 해줄 변수를
각각 sum과 sum2 라는 이름으로 선언해준다.
그리고 for문을 돌려
{1,2,3,4,5,6,7,8}로 나올 경우의 조건과
{8,7,6,5,4,3,2,1}로 나올 경우의 조건을 걸어 카운트 +1 해준다.
ex) {1,2,3,4,5,6,7,8}를 입력했을 경우
i=0이라면
a[i] == i+1 -> 1 == 1이 되고
i=1이라면
a[i] == i+1 -> 2 == 2 가 된다.
int sum = 0;
int sum2 = 0;
for (int i = 0; i < 8; i++) {
if (a[i] == i+1){
sum++;
} else if (a[i] == 8-i) {
sum2++;
}
}
3.
sum이 8이라면 "ascending"를 sum2 이 8이라면 "descending" 를, 그 무엇도 아니라면 "mixed"를 출력한다.
if (sum == 8){
System.out.println("ascending");
} else if (sum2 == 8) {
System.out.println("descending");
} else {
System.out.println("mixed");
}
금방 풀 수 있을 문제 같았는데 생각보다 많이 애먹었다...
'백준' 카테고리의 다른 글
[JAVA] 백준 10818번 최소,최대 (0) | 2023.03.07 |
---|---|
[JAVA] 백준 8958번 OX퀴즈 (0) | 2023.03.07 |
[JAVA] 백준 2675번 문자열 반복 (0) | 2023.03.06 |
[JAVA] 백준 2562번 최댓값 (0) | 2023.03.02 |
[JAVA] 백준 10807번 개수 세기 (0) | 2023.03.01 |