λ‹€μŒ μˆœμ—΄-next_purmutations(Biggest is greater)

2022. 2. 7. 20:15γ†νŒŒμ΄μ¬ 기초

λ‹€μŒ μˆœμ—΄-next_purmutations

 

νŒŒμ΄μ¬μ—μ„œ μˆœμ—΄μ— λŒ€ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ œκ³΅ν•˜μ§€λ§Œ λ‹€μŒ μˆœμ—΄κ°’μ„ λΆˆλŸ¬μ˜€λŠ” 것에 λŒ€ν•΄μ„œλŠ” μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. 

μˆœμ—΄μ€ μ„œλ‘œ λ‹€λ₯Έ nκ°œμ— μ§‘ν•©μ—μ„œ r개λ₯Ό μˆœμ„œμžˆκ²Œ λ‚˜μ—΄ν•˜λŠ” 것이닀.

 

보톡 μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ—μ„œλŠ”

1) a,b,d,e λ‹€μŒμ— λ‚˜μ˜¬ μ΅œμ†Ÿκ°’μ€ 무엇이 λ‚˜μ˜€λŠ”κ°€? 

2) 1,2,4,3,5 λ‹€μŒμ— λ‚˜μ˜¬ μ΅œμ†Ÿκ°’μ€ 무엇인가? 

둜 λ³Ό 수 μžˆλ‹€. 

 

ν•„μžλŠ” ν•΄μ»€λž­ν¬ λ¬Έμ œμ—μ„œ ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜μ˜ ν•„μš”μ„±μ„ λŠκΌˆλ‹€.

https://www.hackerrank.com/challenges/bigger-is-greater/problem?isFullScreen=true 

 

Bigger is Greater | HackerRank

Rearrange the letters of a string to construct another string such that the new string is lexicographically greater than the original.

www.hackerrank.com

 

next_permutations μ½”λ“œ. 

s = list(input())

def next_permutations(arr):
  i,j = len(arr)-1, len(arr)-1

  #μ¦κ°€ν•˜λŠ” ν˜•νƒœλ₯Ό μ°Ύμ„λ•ŒκΉŒμ§€
  while i>0 and arr[i-1]>=arr[i]:
    i-=1
  if i==0:
    return False
  while arr[i-1]>=arr[j]:
    j-=1
  arr[i-1], arr[j] = arr[j], arr[i-1]

  k = len(arr)-1
  #μ—‡κ°ˆλ¦΄λ–„κΉŒμ§€
  while i<k:
    arr[i],arr[k] = arr[k],arr[i]
    i+=1
    k-=1
  return arr

print(next_permutations(s))

 

이 ν•¨μˆ˜λŠ” arr의 값이 intκ°€ μ˜€λ“  charνƒ€μž…μ΄ μ˜€λ“  μƒκ΄€ν•˜μ§€ μ•Šκ³  μˆœμ—΄μ„ μ§„ν–‰ν•œλ‹€. μ—­μ‹œ νŒŒμ΄μ¬μ€ λ²”μš©μ„±μ΄ λ„“λ‹€.

 

if i==0 뢀뢄은 λ‹€μŒ μˆœμ—΄μ„ λ°˜ν™˜ν•˜λŠ” νŒ¨ν„΄μ„ 찾을 수 없을 λ•Œ Falseλ₯Ό λ¦¬ν„΄ν•œλ‹€.

 

λ‹Ήμ—°ν•˜λ©΄μ„œ μž¬λ°ŒλŠ” μ‚¬μ‹€μ΄μžˆλŠ”λ°

맨 λ§ˆμ§€λ§‰ i와 kλ₯Ό κ³„μ†ν•΄μ„œ swapν•΄μ£ΌλŠ” μ΄μœ λŠ” 수의 열이 κ°μ†Œν•˜λŠ” ν˜•νƒœμΌλ•Œ λŒ€μΉ­μ μœΌλ‘œ swapν•œλ‹€λ©΄ sortν•˜λŠ” ν˜•νƒœλ₯Ό λ„κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€.