조합 예제 - 7
문제 분석
사전에서 다루는 문자열이
a와z밖에 없다는 점에 착안해 접근해본다.핵심 아이디어
a와z의 개수가 각각 N, M개 일때 이 문자들로 만들 수 있는 모든 경우의 수는 N + M개에서 N를 뽑는 경우의 수 또는 N + M개에서 M개를 뽑는 경우의 수와 동일하다.
손으로 풀어보기
조합의 경우의 수를 나타내는 dp배열을 초기화하고, 점화식으로 값을 계산해 저장한다.
조합 점화식
D[i][j]=D[i - 1][j]+D[i - 1][j - 1]
몇 번째 문자열을 표현해야 하는지를 나타내는 변수를 K라고 하고, 현재 자릿수에서
a를 선택했을 때 남아있는 문자들로 만들 수 있는 모든 경우의 수를 T라고 했을 떄,T와K를 비교해 문자를 선택한다.문자 선택 기준
T >= K: 현재 자리 문자를a로 선택T < K: 현재 자리 문자를z로 선택하고,K = K - T로 업데이트
예제 입력 1 기준
a = 2,z = 2이고a를 선택했을 때 나머지 문자열로 만들 수 있는 경우의 수는D[3][2]다.(3은 남은 문자 총 개수, 2는 남은z의 개수)D[3][2]= 3 >=K(2)이므로a선택,z는 2개 남음D[2][2]= 1 <K(2)이므로z선택,z는 1개 남음,K = K - T = 1로 업데이트D[1][1]= 1 >=K(1)이므로a선택,z는 1개 남음D[0][1]= 0 <K(1)이므로z선택
과정 2를
a와z의 문자들의 수를 합친 만큼 반복해 정답 문자열을 출력한다.
슈도코드
코드 구현 - 파이썬
코드 구현 - 자바
Last updated