![[프로그래머스] 줄 서는 방법 (python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboQZbw%2FbtsHUViB3AQ%2FwRXO2XAlaJQ9MwBbhk7gj0%2Fimg.jpg)
https://school.programmers.co.kr/learn/courses/30/lessons/12936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제에서 k는 n! 이하의 자연수라고 나와있다. 이 문장이 힌트이다.
문제의 예시를 보자. 맨 앞의 숫자가 1일 때 1을 맨 앞의 원소로 갖는 리스트는 [1, 2, 3], [1, 3, 2]이다.
이 개수는 (n - 1)!이다. 문제 보기는 n = 3이므로 리스트 개수는 2개 이다.
그 리스트 안에서 2로 시작하는 리스트는 [1, 2, 3]이다.
이 개수는 (n - 2)!이다. 뭔가 규칙이 보인다.
각 자리수로 내려가면서 인덱스 값을 (n - 1)!, (n - 2)!, … 로 나눈 값을 number의 인덱스로 사용해서 빼주면 되는 문제이다.
import math
def solution(n, k):
answer = []
number = [i for i in range(1, n + 1)]
while number:
perm = math.factorial(n - 1) # 현재 자리수의 순열 개수
idx = (k - 1) // perm # k 값을 인덱스에 맞추기 위한 1 걈소
answer.append(number.pop(idx)) # 위에서 구한 인덱스 값을 answer에 삽입
k = k % perm # 현재 자리수의 순열 개수로 나눈 나머지로 조정
n -= 1 # n을 줄여 다음 자리로 이동
return answer
references
https://school.programmers.co.kr/learn/courses/30/lessons/12936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'CSE > 알고리즘 (algorithm)' 카테고리의 다른 글
[백준 17827] 달팽이 리스트 (python) (0) | 2025.01.27 |
---|---|
[백준 27111] 출입 기록 (python) (0) | 2025.01.27 |
[Goorm level] 회전 배열 (python) (0) | 2024.06.11 |
[프로그래머스] 124 나라의 숫자 (python) (0) | 2024.06.11 |
[프로그래머스] 오픈채팅방 (python) (0) | 2024.06.11 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!