본문 바로가기

백준 문제 풀기/Array

백준 Array문 단계별 풀기 - 2920번

반응형

실패코드 

답은 맞게 나오는데 속도와 케이스가 다르기때문에 틀렸다고 생각이 든다.

배열을 ascending, descending 배열을 추가로 생성해서 오름차순 배열에 넣어주고 내림차순 배열에 넣어주고 

각각 정렬 해서 배열과 배열사이의 값을 비교하는 식으로 코드를 짯다.
정답은 맞았지만 방식의 문제

 

import java.util.Scanner;

public class Main2 {
//	2920번
//	다장조는 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까지 숫자가 한 번씩 등장한다.
//
//	출력
//	첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
//
//	예제 입력 1 
//	1 2 3 4 5 6 7 8
//	예제 출력 1 
//	ascending
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int number = 8;
		int numArray[] = new int[number];
		int ascending[] = new int[number];
		int descending[] = new int[number];
		
		for (int i = 0; i < numArray.length; i++) {
			numArray[i] = scanner.nextInt();
			ascending[i] = numArray[i];
			descending[i] = numArray[i];
		}
		
		int temp = 0;
		for (int i = 0; i < numArray.length - 1; i++) {
			for (int j = i + 1; j < numArray.length; j++) {
				if(numArray[i] > numArray[j]) {
					temp = ascending[i];
					ascending[i] = ascending[j];
					ascending[j] = temp;
				} 
				if (numArray[i] < numArray[j]) {
					temp = descending[i];
					descending[i] = descending[j];
					descending[j] = temp;
				} 
			}
		}
		String str = "";
		for (int i = 0; i < numArray.length; i++) {
			if(numArray[i] == ascending[i]) {
				str = "ascending";
			} else if(numArray[i] == descending[i]) {
				str = "descending";
			} else {
				str = "mixed";
			}
		}
		System.out.println(str);
		scanner.close();
		
	}
}

 

정답 코드 

 

굳이 배열을 만들어서 비교할 필요 없이

numArray[i + 1] = numArray[i] + 1 을 하면 차례대로 증가하는 값과 일치하기때문에 오름차순

numArray[i + 1] numArray[i] - 1 차차 감소하는 값이기 때문에 내림차순

그외는 mixed로 처리해주면된다.

import java.util.Scanner;

public class Main2 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int number = 8;
		int numArray[] = new int[number];
		String str = "";
		for (int i = 0; i < numArray.length; i++) {
			numArray[i] = scanner.nextInt();
		}
		for (int i = 0; i < numArray.length - 1; i++) {
			if(numArray[i + 1]  == numArray[i] + 1) {
				str = "ascending";
			}else if (numArray[i + 1] == numArray[i] - 1) {
				str = "descending";
			} else {
				str = "mixed";
				break;
			}
		}
		System.out.println(str);
	}
	
반응형