You will be fine

<Algorithm> 14. 10972번 다음순열

by BFine
반응형

1. 10972번 다음순열

  • 오른쪽에서 왼쪽으로 찾으면서 오른쪽의 수가 왼쪽의 수 보다 큰 경우를 탐색 ( > : 진행, < : 탐색 )  ex) 1 2 < 4 3

  • 탐색된 왼쪽 수를 기준으로 오른쪽 수 중에서 큰 수와 자리 변경

  • 자리 변경 후 SWAP

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    public class Main {
     static    int[] input;
     
        public static void main(String[] args) throws NumberFormatException, IOException {
            
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            int N=Integer.parseInt(br.readLine());
            
            String[] in=br.readLine().split(" ");
            input=new int[N];
            
            boolean checkValue=false;
            
            for(int i=0;i<N;i++) {            
                input[i]=Integer.parseInt(in[i]);
            }            
            
            for(int i=N-1;i>0;i--) {
            
                if(input[i]>input[i-1]){
                    
                    checkValue=true;
                    
                    for(int j=N-1;j>=i;j--) {
                        
                        if(input[j]>input[i-1]) {
                        
                            int temp=input[i-1];
                            input[i-1]=input[j];
                            input[j]=temp;
                            
                            swap(input, i);
                            break;
                            }
                    }    
                    
                    break;
                    }
                
                }
            
              if(checkValue==false) {
                
                System.out.println("-1");
                
            }else {
                for(int i=0;i<N;i++) {
                    System.out.print(input[i]+" ");
                }
                
                
            }
            
        }
        public static void swap(int[] input,int start) {
            int count=start;
            
            for(int i=input.length-1;i>start;i--) {
                
                if(i<=count)break;
                
                int temp=input[i];
                input[i]=input[count];
                input[count]=temp;
                count++;
            }
        }
     
    }
    cs

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기