본문 바로가기

Algorithm (Java)

[자바/java]백준 2920 음계

import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;


public class Main {
    
    public static void main(String[] agrs){
        Scanner sc = new Scanner(System.in);
        int[] numberArray = new int[8];
        for(int i=0; i<8; i++){        
             numberArray[i]= sc.nextInt();
        }          
  
        if(numberArray.equals(Arrays.sort(numberArray))){
              System.out.println("ascending");
        } else if(numberArray.equals(Arrays.sort(numberArray, Collections.reverseOrder()))) {    
            System.out.println("descending");
        } else {
            
            System.out.println("mixed");
            
        }             
                
      }
}

에러: 

왜 void라는거지:

Arrays.sort()메소드의 반환값이 void 라서...

Arrays.sort()는 반환값은 없으며 그저 해당 배열을 정렬해주는 기능임

 

 

자바 int형 배열의 내림차순 정렬: 

내림차순 정렬의 경우 기본으로 제공되는 메서드가 없는 관계로 직접 구현하여 사용

Comparator을 사용한 정렬은 Object를 상속받을 수 있는 참조자료형에만 사용 가능

먼저 오름차순 정렬을 한 다음 그 결과를 뒤집는식으로 구현

      public static int[] reverseNumberArray(int[] arr){
          int temp; 
          for(int i=0; i<arr.length/2; i++){
              temp = arr[i];
              arr[i] = arr[arr.length-1];
              arr[arr.length-1] = temp;
          }

          return arr;
      }

문제풀이 1 : Arrays클래스의 Arrays.sort기능을 활용한 풀이법 

 

1) Scanner로 입력받은 숫자 8개를 int형 배열의 각 인덱스에 넣어줌

2) Arrays.copyOf() 메소드를 이용하여 입력받은 배열 깊은복사

3)  복사본 배열을 오름차순 정렬

4)  오름차순된 정렬을 거꾸로 뒤집어, 내림차순 정렬하는 메소드 구현

5) 조건비교

   - 기존 배열과, 기존 배열을 깊은복사한 후 정렬한 배열과 일치한다면 "ascending"

   - 기존 배열과, 기존 배열을 깊은복사 후 정렬한 배열을 뒤집은 배열과 일치한다면 "descending"
   -  위 두 case가 아니라면 "mixed"

import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;


public class Main{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        // Scanner로 입력받은 숫자 8개를 int형 배열의 각 인덱스에 넣어줌
        int[] numberArray = new int[8];
        for(int i=0; i<8; i++){        
             numberArray[i]= sc.nextInt();
        }          
          
       // Arrays.copyOf() 메소드를 이용하여 깊은복사
       int[] numberArray2 = Arrays.copyOf(numberArray, numberArray.length);
       
       // 복사본 배열을 오름차순 정렬
       Arrays.sort(numberArray2);
       
       // 기존 배열과, 기존 배열을 깊은복사한 후 정렬한 배열과 일치한다면 "ascending"
        if(Arrays.equals(numberArray, numberArray2)){
      
            System.out.println("ascending");
            
       // 기존 배열과, 기존 배열을 깊은복사 후 정렬한 배열을 뒤집은 배열과 일치한다면 "descending"
        } else if(Arrays.equals(numberArray,reverseNumberArray(numberArray2))) {    
            System.out.println("descending");
            
       // 위 두 case가 아니라면 "mixed"
        } else {
            
            System.out.println("mixed");
           
        }
    }              
        //12345678
        //87654321
        
      // 배열을 거꾸로 뒤집는 메소드
      public static int[] reverseNumberArray(int[] arr){
          int temp; 
          for(int i=0; i<arr.length/2; i++){
              temp = arr[i];
              arr[i] = arr[arr.length-1];
              arr[arr.length-1] = temp;
          }

          return arr;
      }
   
}

 


문제풀이2:

리스트에서 원소를 차례대로 i, i+1을 비교 후 

두 원소를 기준으로 오름차순/ 내림차순 여부 체크

오름차순 및 내림차순이 모두 false이면 mixed출력

public class Hi{
    
    public static void main(String[] args){

        boolean ascending = true;
        boolean descending = true;
        
    	Scanner sc = new Scanner(System.in);
        int[] numberArray = new int[8];
        for(int i=0; i<8; i++){        
             numberArray[i]= sc.nextInt();
        }          
        
        for(int i=1; i<numberArray.length; i++) {
        	if(numberArray[i-1] < numberArray[i]) {
        		descending = false;
        	} else if(numberArray[i] < numberArray[i-1]){
        		ascending = false;
        	}
        }
        
        if(ascending) System.out.println("ascending");
        else if (descending) System.out.println("descending");
        else System.out.println("mixed");
        

    } 
        
}

 

알고리즘 입문자의 소회: 

와..

알고리즘은..신세계로구나..!

재미있다..

그리고 내가 Java를 배웠지만 Java에 대해 얼마나 무지한지 깨닫게 되었다

자바에서 제공하는 API들을 알고는 있지만 정확히 알지를 못해서 알고리즘을 구현할 때

오류가 발생해도 그 이유를 찾지 못하는 것을 발견하고

자바를 더 공부해야겠다고 느꼈다

 

 

'Algorithm (Java)' 카테고리의 다른 글

[자바/java] 백준 2798 블랙잭  (0) 2023.02.20