CodingTest/Baekjun Online Judge
[ BOJ / 파이썬 ] 15654 N과M (5)
EEOOOO
2022. 8. 26. 23:19
| 제출 1 |
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
nums = list(map(int, input().split()))
nums.sort()
group = []
def find():
if len(group) == m:
print(' '.join(map(str,group)))
return
for i in range(n):
if not nums[i] in group:
group.append(nums[i])
find()
group.pop()
find()
앞선 문제들과 비교했을 때, 1부터 n까지 넣어주는 것에서 숫자배열을 차례차례 넣어주는 것으로 바뀐 것이어서 그렇게 어렵지는 않았다.
다만, 이 문제부터 봤으면 까다로웠을 것 같다. 쉬운 문제부터 차근차근 풀어서 도달하는게 깊은 이해에 얼마나 중요한 지 다시 한 번 깨닫게 되는 순간인 것 같다.
| 제출 2 |
import sys
input = sys.stdin.readline
from itertools import permutations
n, m= map(int, input().split())
nums = sorted(list(map(int, input().split())))
for i in permutations(nums , m):
print(" ".join(map(str,i)))
: permutations로는 더 간단하게 해결 가능하다.
: 너무 이전과 같은 양상이라 발전이 없는가 싶어서 간만에 숏코딩 페이지도 펼쳐 봤다.
import itertools
n, m = map(int, input().split())
num_list = sorted(list(map(int, input().split())))
for i in itertools.permutations(num_list, m):
print(*i)
확실히 남의 코드를 보긴 봐야한다 진짜. 내가 모르는걸 남들이 되게 유용하게 사용 중인 걸 알 때마다 너무 억울해진다.
일단 sorted를 한 줄에 그냥 해버리는 것도 괜찮다. 저정도는 가독성에 나쁘지 않은 것 같다.
포인트는 저 * 연산자를 사용한 건데, 내가 진짜 저걸 알아봐야지알아봐야지 하고 넘기다가 이제야 찾는다.
이런 의미로 사용되는 것 같다.
그리고 이렇게도.
C언어에서 포인터 연산자로 사용되던 아이라서 그런 느낌이겠거니 했는데 첫 번째 방식은 와! 전혀 다르다 진짜.
파이썬은 유독 신기한 사용법이 자꾸 나온다. 시간 날 때마다 봐주는게 구현 속도 차이에 많은 영향을 줄 것 같다.