์ƒˆ์†Œ์‹

๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ (๋ฏธ์ž‘์„ฑ) - ๋ธŒ๋ฃจํŠธ ํฌ์Šค(Brute Force) - ์ˆœ์—ด(permutation)

  • -

* ๋ธŒ๋ฃจํŠธ ํฌ์Šค (Brute Force)

 

  • ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…ํ•˜์—ฌ ์–ต์ง€๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ฆ‰, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํƒ์ƒ‰ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ex ) ๋„ค์ž๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ž๋ฌผ์‡ ๋Š” 0000~9999๋ฅผ ์ „๋ถ€ ๋Œ€์ž…ํ•ด๋ณด๋ฉด ํ’€๋ฆฐ๋‹ค. (๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 10,000)

 

 

 

*๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. ๋ฌธ์ œ์˜ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ๊ณ„์‚ฐํ•ด๋ณธ๋‹ค.  (์ง์ ‘ ์†์œผ๋กœ ๊ณ„์‚ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 100๋งŒ์ด ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ผ๋ฉด, ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค.)
  2. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค์–ด ์ฝ”๋”ฉํ•œ๋‹ค.  (for๋ฌธ, ์ˆœ์—ด์‚ฌ์šฉ, ์žฌ๊ท€ํ˜ธ์ถœ, ๋น„ํŠธ๋งˆ์Šคํฌ ๋“ฑ์ด ์žˆ๋‹ค.)
  3. ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋‹ต์„ ๊ตฌํ•œ๋‹ค.
  4. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋Œ€๋ถ€๋ถ„ O(๊ฒฝ์šฐ์˜ ์ˆ˜ * ๋ฐฉ๋ฒ• 1๊ฐ€์ง€์˜ ์†Œ์š”์‹œ๊ฐ„)

 

 

*๋ธŒ๋ฃจํŠธ ํฌ์Šค ๊ตฌํ˜„

 

*N์ค‘ for๋ฌธ

 

  • N๊ฐœ ์ค‘์— M๊ฐœ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์žฌ๊ท€ ํ•จ์ˆ˜, ๋น„ํŠธ๋งˆ์Šคํฌ ๋“ฑ์ด ๋” ์งง๊ณ  ๋ณด๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

 

 

* ์ˆœ์—ด (Permutation)

  • 1~ N ๊นŒ์ง€์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด
  • ์ „์ฒด ๊ธธ์ด๋Š” ํ•ญ์ƒ N์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต(๊ฒน์น˜๋Š” ์ˆ˜)์ด ์—†๋‹ค.
  • ์ˆœ์„œ

ํฌ๊ธฐ๊ฐ€ N์ธ ์ˆœ์—ด์€ ์ด N! (factorial)๊ฐœ ์กด์žฌํ•œ๋‹ค.

 

* Python - itertools.permutations( n )

python์—์„œ a = [a,b,c]์˜ ์ˆœ์—ด์„ ๊ตฌํ• ๋•Œ
from itertools import permutations
A = ['a','b','c']
A_p =list( permutations(A) )
print(A_p)

>>>>>>>>> [('a', 'b', 'c'), ('a', 'c', 'b'),
        ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

 

 

* ๋‹ค์Œ ์ˆœ์—ด (next permutation)

์ˆœ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ sortํ–ˆ์„๋•Œ, ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ทœ์น™์„ ์ด์šฉํ•˜์—ฌ, ๋‹ค์Œ ์ˆœ์—ด๊ณผ ์ด์ „ ์ˆœ์—ด์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

  1. A[k-1] < A[k] ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ k๋ฅผ ์ฐพ๋Š”๋‹ค. 
  2. j >= k ์™€ A[j] > A[k-1]๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ J๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. A[k-1] ๊ณผ A[j]๋ฅผ ๋ฐ”๊พผ๋‹ค.
  4. A[k]๋ถ€ํ„ฐ ์ˆœ์—ด์„ ๋’ค์ง‘๋Š”๋‹ค.

 

1~5๊นŒ์ง€์˜ ์ˆœ์—ด์„ ์˜ˆ๋กœ๋“ค์–ด ๋ณด์ž๋ฉด A = [ 1 2 3 4 5 ] ๋ฅผ ์‚ฌ์ „์ˆœ์œผ๋กœ ๋‚˜์—ดํ–ˆ์„๋•Œ

์ฒซ๋ฒˆ์งธ ์ˆœ์—ด : [ 1 2 3 4 5 ] ๋กœ ์‹œ์ž‘ํ•˜์—ฌ, 

............

.............

.............       ๋ช‡๋ฒˆ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ ๋’ค, ์•ž์˜ ์„ธ์ž๋ฆฌ๊ฐ€ 3 1 4 ์ผ๋•Œ,

[ 3 1 4 2 5 ]  ๋‹ค์Œ์œผ๋กœ ํฐ์ˆ˜๋Š” 2์™€ 5์ค‘์—์„œ ๊ณจ๋ผ์•ผํ•œ๋‹ค.

[ 3 1 4 5 2๋‹ค์Œ์€ 3 1 ๋’ค์˜ 4๊ฐ€ ๋ฐ”๋€”์ฐจ๋ก€์ด๋‹ค. ์ด๋•Œ 3 1 4 ๋ฅผ ์ œ์™ธํ•œ ์ˆ˜์ค‘์— 4๋ณด๋‹ค ํฐ์ˆ˜์ธ 5์™€ 4๋ฅผ swapํ•˜๊ฒŒ๋œ๋‹ค.

[ 3 1 5 2 4 ] 

n = int(input())
arr = list(map(int,input().split()))

def next_permutation(a):

    
    n = len(a) - 1   # n = 2๊ฐ€ ๋œ๋‹ค.
    i = n            # i = 2
    while i > 0 and a[i-1] >= a[i]: 
    # ์ฆ‰, ์‚ฌ์ „์ˆœ์œผ๋กœ ๋งˆ์ง€๋ง‰ ์ˆœ์„œ์ผ๋•Œ๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ์ธ๋ฐ, ๊ทธ๊ฒƒ์„ ํ™•์ธ
        i -= 1
    if i == 0: # ์ธ๋ฑ์Šค 0๊นŒ์ง€, ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ์ˆœ์„œ์˜ ์ˆ˜์—ด ex) 3 2 1
        return False #False ๋ฆฌํ„ด

    j = n 
    while a[i-1] >= a[j]: # ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฉด์„œ a[i-1]๋ณด๋‹ค ํฐ ์ˆ˜
        j -= 1
    a[i-1], a[j] = a[j], a[i-1] # SWAP
    j = n

    while i < j:
        a[i], a[j] = a[j], a[i] # a[i]๋ถ€ํ„ฐ ์ˆœ์—ด ๋’ค์ง‘๊ธฐ
        i += 1
        j -= 1
    return True

if next_permutation(arr)  : 
    print(*arr)
else : 
    print(-1)

 

 

 

 

 

 

 


* ๊ด€๋ จ ๋ฌธ์ œ

 

https://infinitt.tistory.com/241

์ผ๊ณฑ ๋‚œ์Ÿ์ด : ๋‚œ์ด๋„ ๋ธŒ๋ก ์ฆˆ 2(solve.ac ๊ธฐ์ค€)

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 2309 : ์ผ๊ณฑ ๋‚œ์Ÿ์ด

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/2309 2309๋ฒˆ: ์ผ๊ณฑ ๋‚œ์Ÿ์ด ์•„ํ™‰ ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‚œ์Ÿ์ด๋“ค์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ํ‚ค๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ€๋Šฅํ•œ ์ •..

infinitt.tistory.com

 

 

https://infinitt.tistory.com/242

๋‚ ์งœ ๊ณ„์‚ฐ : ๋‚œ์ด๋„ ์‹ค๋ฒ„ 5 (solve.ac๊ธฐ์ค€)

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 1476 : ๋‚ ์งœ ๊ณ„์‚ฐ

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/1476 1476๋ฒˆ: ๋‚ ์งœ ๊ณ„์‚ฐ ์ค€๊ทœ๊ฐ€ ์‚ฌ๋Š” ๋‚˜๋ผ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ๋„์™€ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ์ด์šฉํ•œ๋‹ค. ์ค€๊ทœ๊ฐ€ ์‚ฌ๋Š” ๋‚˜๋ผ์—์„œ๋Š” ์ˆ˜ 3๊ฐœ๋ฅผ ์ด์šฉํ•ด์„œ ์—ฐ๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜..

infinitt.tistory.com

 

https://infinitt.tistory.com/245

ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ : ๋‚œ์ด๋„ ๊ณจ๋“œ5 (solve.ac๊ธฐ์ค€)

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 14500 : ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/14500 14500๋ฒˆ: ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ž€ ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ด์–ด์„œ ๋ถ™์ธ ๋„ํ˜•์ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์€ ์„œ๋กœ ๊ฒน์น˜..

infinitt.tistory.com

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

1, 2, 3 ๋”ํ•˜๊ธฐ : ๋‚œ์ด๋„ ์‹ค๋ฒ„3 (solve.ac๊ธฐ์ค€)

 

9095๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ

๋ฌธ์ œ ์ •์ˆ˜ 4๋ฅผ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์ด 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ์ˆ˜๋ฅผ 1๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 ์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์–‘์ˆ˜์ด๋ฉฐ 11๋ณด๋‹ค ์ž‘๋‹ค. ์ถœ๋ ฅ ๊ฐ

www.acmicpc.net

 


 


 


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

 

10972๋ฒˆ: ๋‹ค์Œ ์ˆœ์—ด

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆœ์—ด์˜ ๋‹ค์Œ์— ์˜ค๋Š” ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๋งˆ์ง€๋ง‰์— ์˜ค๋Š” ์ˆœ์—ด์ธ ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

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

 

10973๋ฒˆ: ์ด์ „ ์ˆœ์—ด

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆœ์—ด์˜ ์ด์ „์— ์˜ค๋Š” ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์ฒ˜์Œ์— ์˜ค๋Š” ์ˆœ์—ด์ธ ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

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

 

10974๋ฒˆ: ๋ชจ๋“  ์ˆœ์—ด

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

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

 

10819๋ฒˆ: ์ฐจ์ด๋ฅผ ์ตœ๋Œ€๋กœ

์ฒซ์งธ ์ค„์— N (3 ≤ N ≤ 8)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋ฐฐ์—ด A์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๋Š” -100๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

www.acmicpc.net

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.