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를 한 줄에 그냥 해버리는 것도 괜찮다. 저정도는 가독성에 나쁘지 않은 것 같다.

 

포인트는 저 * 연산자를 사용한 건데, 내가 진짜 저걸 알아봐야지알아봐야지 하고 넘기다가 이제야 찾는다.

 

https://wikidocs.net/24

 

이런 의미로 사용되는 것 같다. 

 

https://wikidocs.net/24

그리고 이렇게도.

 

C언어에서 포인터 연산자로 사용되던 아이라서 그런 느낌이겠거니 했는데  첫 번째 방식은 와! 전혀 다르다 진짜. 

 

파이썬은 유독 신기한 사용법이 자꾸 나온다. 시간 날 때마다 봐주는게 구현 속도 차이에 많은 영향을 줄 것 같다.