문제 출처 : https://www.acmicpc.net/problem/2920
문제
설명
비교적 간단한 문제인데, 처음에 필요 이상으로 복잡하게 생각을 해서 좀 길게 코드를 짰습니다.
처음 버전과 간단히 리팩토링한 버전을 차례로 올립니다.
그리고 이 둘보다 더 간단하게도 풀 수 있습니다. 너무 간단해서 그냥 말로만 설명드리자면,
그냥 입력값 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 |