Thief of Wealth
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초512 MB40328124374.085%

문제

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • N개의 자연수 중에서 M개를 고른 수열
  • 같은 수를 여러 번 골라도 된다.

입력

첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)

둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.

출력

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

수열은 사전 순으로 증가하는 순서로 출력해야 한다.


정답률이 높길래 이전 코드의 적당한 수정으로 통과하겠거니 했더니 왠걸 

시간초과가 떳다...


파이썬의 단점이 드러나는 문제였다. ㅠㅡㅠ

그래서 바로 최적화에 들어가서 보니 쓸데없는 부분이 너무 많았다. (죄송합니다 ㅠ)

그래서 핵심은 살리고 쓸데없는 코드들을 줄였다.

import sys
import math
sys.stdin = open("input.txt","r",encoding="utf-16")

n,m = map(int, input().split())
answer = sorted(list(map(int,input().split())))

temp = [""]*m
t_list = []
def cal_perm(deepness):
if deepness == m:
a = str(temp)[1:-1].replace(",","")
if a not in t_list:
t_list.append(a)
print(a)
else:
for i in answer:
temp[deepness] = i
cal_perm(deepness+1)
#temp[deepness] = -1

cal_perm(0)


여기서 반전은 이것도 3%에서 시간초과가 떳다는 것이다.

무엇을 줄여야 할까? 재귀를 포기하고 다른 방식으로 짜야하나?

같은 수를 여러번 고를 수 있는게 이렇게 영향을 많이 주다니!

파이썬으로 꿀빤 벌인가..

그러나 여기서 어떻게 더 줄이지?

python으로 통과한 사람들은 도대체 뭐야!

그냥

C++로 통과해버릴까나.. ㅠㅠ

일단 해결책을 찾는대로 수정해야겠다.






'개발 > 알고리즘' 카테고리의 다른 글

15666 N과 M (12)  (0) 2019.01.12
15665 N과 M (11)  (0) 2019.01.12
15664 N과 M (10)  (0) 2019.01.05
15663 N과 M (9)  (0) 2019.01.05
15657 N과 M (8)  (0) 2019.01.05
profile on loading

Loading...