{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-15650-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"3e2d8f65-b690-58d7-a36a-abbc13bd91f8","excerpt":"자연수 n, m이 입력될 때 1부터 n까지 자연수 중에서 중복 없이 m개를 고른 수열, 고른 수열은 오름차순. 위 두개의 조건을 만족하는 수열들을 출력하는 문제. 두가지 풀이 모두 m과 비교를 하여 출력과 return으로 함수의 종료를 작성하였다. 첫번째 풀이는 한 개의 매개변수를 사용하여 풀었으며 반복문 안에서 i보다 큰 수들의 방문 확인 배열 값들을 바꿔주는 2중 반복문을 사용하였다. 두번째 풀이는 크기와 현재 인덱스 값을 저장할 매개변수 두 개를 사용하였다. 인덱스값부터 n…","html":"<p>자연수 n, m이 입력될 때 1부터 n까지 자연수 중에서 중복 없이 m개를 고른 수열, 고른 수열은 오름차순. 위 두개의 조건을 만족하는 수열들을 출력하는 문제. 두가지 풀이 모두 m과 비교를 하여 출력과 return으로 함수의 종료를 작성하였다. 첫번째 풀이는 한 개의 매개변수를 사용하여 풀었으며 반복문 안에서 i보다 큰 수들의 방문 확인 배열 값들을 바꿔주는 2중 반복문을 사용하였다. 두번째 풀이는 크기와 현재 인덱스 값을 저장할 매개변수 두 개를 사용하였다. 인덱스값부터 n까지 반복문을 실행하고 방문하지 않은 값일 때 방문 확인, 배열에 추가 후 현재 반복중인 i를 이용하여 재귀적으로 호출하였다. 그 후 다음 반복을 위해 현재 i값만 방문 확인 값을 바꿔주었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">n<span class=\"token punctuation\">,</span> m <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nl <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nvisit <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token boolean\">False</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> n\nans <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token comment\"># def bt(index):</span>\n<span class=\"token comment\">#     if index == m: # 크기가 같을 떄</span>\n<span class=\"token comment\">#         print(*ans)</span>\n<span class=\"token comment\">#         return</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     for i in range(n): # 입력받은 수-1 까지 반복</span>\n<span class=\"token comment\">#         if visit[i]: # 이미 사용한 수일 때 넘어감</span>\n<span class=\"token comment\">#             continue</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         ans.append(l[i]) # 배열에 해당 값 추가</span>\n<span class=\"token comment\">#         visit[i] = True # 방문 확인 배열에 값 수정</span>\n<span class=\"token comment\">#         bt(index+1) # 크기를 늘려 재귀적 호출</span>\n<span class=\"token comment\">#         ans.pop() # 다음 반복을 위해 배열의 마지막 값 제거</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         for j in range(i+1, n): # 현재 수보다 큰 수들을 전부 미방문 처리</span>\n<span class=\"token comment\">#             visit[j] = False</span>\n<span class=\"token comment\"># bt(0)</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">bt</span><span class=\"token punctuation\">(</span>depth<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> depth <span class=\"token operator\">==</span> m<span class=\"token punctuation\">:</span> <span class=\"token comment\"># 크기와 같을 떄 출력하고 함수 종료</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>ans<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span>\n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>index<span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 이미 들어간 값이 있다면 해당 값보다 큰 것만 반복</span>\n        <span class=\"token keyword\">if</span> <span class=\"token keyword\">not</span> visit<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 방문하지 않았던 것일 때</span>\n            ans<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            visit<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n            bt<span class=\"token punctuation\">(</span>depth<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token comment\"># 현재 반복중인 i를 index로</span>\n            visit<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n            ans<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\"># 재귀적으로 호출할 때를 위해 맨 뒤에 append한 값을 삭제</span>\nbt<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-15650 - Python","date":"October 14, 2020"}}},"pageContext":{"slug":"/Algorithm/BOJ-15650-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-1913-Python/"},"frontmatter":{"title":"BOJ-1913 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-5218-Python/"},"frontmatter":{"title":"BOJ-5218 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}