티스토리 뷰

https://www.acmicpc.net/problem/10973

 

10973번: 이전 순열

첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.

www.acmicpc.net

let [ N, ...nums ] = require('fs').readFileSync('./dev/stdin').toString().trim().split(/\s+/).map(v => +v);



  let swapA=-1;// 바꿔야되는 부분

  // 맨 뒤에서부터 시작해서 내림차순이 끊기는 부분을 찾는다. 
  for(let i = nums.length-1; i>0; i--){
    if(nums[i-1]>nums[i]){
      swapA = i-1;
      break;
    }
  }

  if(swapA==-1){ // 내림차순이 끊기지 않는다면.. 마지막 순열이다. 
    console.log('-1');
  }else{
    let max = nums[swapA+1];
 let swapB = swapA+1; //바꿔야되는 부분2 
 if(swapB+1<N){
   for(let i = swapA+2; i<nums.length; i++){
     if(nums[i]>max&& nums[i]<nums[swapA]){
       max = nums[i];
       swapB = i
      }
    }
  }

  [nums[swapA],nums[swapB]] = [nums[swapB],nums[swapA]]
const answer = [...nums.slice(0,swapA+1),...nums.slice(swapA+1,N).sort((a,b)=>b-a)].join(' ')
console.log(answer)
  }
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함