inflearn logo
강의

講義

知識共有

Do it! アルゴリズムコーディングテスト with C++

백준 1722 교재 81 질문

解決済みの質問

331

sprtms53254189

投稿した質問数 3

0

해당 문제를 푸는 알고리즘에 대해 더 자세한 설명이 필요할 것 같습니다.

K번째 순열 출력할때, 왜 k와 (n-1)!를 비교하는지 이해가되지 않습니다.

c++ 코딩-테스트 알고리즘

回答 1

2

harucoding

안녕하세요! 반갑습니다.

순열의 순서 구하기 문제로 이해를 하였는데요.

예제로 한번 말씀드려 보고자합니다.

 

예를들어 K = 15, 자리수가 4자리라고 가정을 하면 (n=4)

1 2 3 4 중 제일 첫 번째 자리에 어떤 값이 들어가야 하는지 판단하는 경우 K = 15와 (n-1)! = 6을 가지고 비교하게 됩니다. 이유를 생각하여 보면 (n-1)! 이라는 값의 의미는 n자리(여기에서는 제일 앞자리)가 정해졌을 때 나머지 남은 자리로 구할 수 있는 모든 순열의 경우의 수 이기 때문입니다.

해당 문제로 바꾸어 이야기하면 (4-1)! = 6 의 의미는 4자리 순열에서 맨 앞 자리가 정하여 졌을 때 만들 수 있는 경우의 수입니다.

1이 맨 앞자리로 정해졌다고 하면

1 2 3 4

1 2 4 3

1 3 2 4

1 3 4 2

1 4 2 3

1 4 3 2

이렇게 6가지 경우의 수가 나옵니다. 그럼 다시 처음으로 돌아가서 K = 15 즉 15번째 순열을 구하는 경우를 생각해보면

1이 가장 앞에 있는 경우 6가지 => K(15) 와 6을 비교하여 K가 더 크면 K에서 6을 마이너스

2가 가장 앞에 있는 경우도 6가지 => K(9)와 6을 비교해서 K가 더 크면 K에서 6을 마이너스

3이 가장 앞에 있는 경우도 6자기 => K(3)과 6을 비교하면 6이 더 크기 때문에 15번째 순열은 제일 앞자리가 3으로 시작함.

1~6번째 순열까지는 제일 앞자리에 1이 있는 순열이고

7~12번째 순열이면 제일 앞자리에 2가 있는 순열이고

13~18번째가 제일 앞자리에 3이 있는 순열이기 때문에

15번째 순열은 제일 앞자리에 3이 온다는 것을 알 수 있습니다.

더불어 여기에서 앞에 12번째 순열의 개수가 마이너스가 되었기 때문에

K = 15 번째 순열은 제일 앞자리가 3이면서

3 X X X 로 만들 수 있는 순열 중 3번째 ( 15 -12 ) 순열이라는 것을 파악 할 수 있습니다.

 

때문에 이러한 원리로 K번째 순열 출력할때, k와 (n-1)! 을 비교하여 보는 것이라고 이해해주시면 좋을 것 같습니다.

감사합니다.

즐거운 주말 되세요.

수강평 이벤트

0

17

2

Reticle이 안나옵니다.

0

10

1

진행 방법 질문드립니다!

0

30

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

19

1

Singleton 관련 질문입니다.

1

31

2

갑자기 채점 사이트가 바뀌었어요

0

19

1

42. [세그먼트 트리 실전 문제] 구간 합 구하기3 (백준 2042)

0

64

1

10986번 질문 있습니다!

0

45

0

LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문

0

120

0

백준 1377 질문있습니다

0

218

1

백준11505, 교재 73번

0

282

1

백주 1456번

0

200

1

백준 1325, 교재 47번 문제 질문입니다.

0

358

1

백준 11404 플로이드 문제 질문있습니다.

0

260

1

문제 85번 질문드립니다

0

322

1

백준 13023 질문있습니다.

0

205

1

문제 8번 질문드립니

0

306

1

백준 1876여행 유니온 파인드 질문있습니다.

0

241

1

백준 2251 C++ 질문 있습니다.

0

398

2

퀵정렬 질문

3

292

1

i==k일떄 i++안해도되지않나요

0

437

1

알고리즘 코딩테스트 문제풀이 강의 - 14 절댓값 힙 구현하기 (백준 11286)

0

550

1

알고리즘 코딩테스트 문제풀이 강의 - 9 DNA 비밀번호 (백준 12891)

1

573

1

C++은 실전문제에 대한 강의가 없나요? 자바나 파이썬은 있는데 없는거 같아서요.

2

592

2