티스토리 뷰

반응형

😅 문제 

https://www.acmicpc.net/problem/6603

🤔 문제 상황 

- k개 숫자들이 있는 집합에서 로또번호를 뽑기 위해 6개의 번호를 추출하는 경우를 모두 출력한다.

 

🧐 해결 전략 

- 백트래킹을 사용해야하지만 나는 내장함수 combinations를 사용했다.. 백트래킹으로도 풀어봐야한다.

🎰 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# main 함수 만들때 import는 안에다 써주어야 한다.
 
def main():
    from sys import stdin
    from itertools import combinations
    testcase = []
    while True:
        n = list(map(int, stdin.readline().split()))
        testcase.append(n)
        if n == [0]:
            break
    for t in range(len(testcase)):
        if testcase[t] == [0]: # 입력값이 0 이면 함수 종료
            return
        else :
            r = testcase[t][0# 몇개 뽑을 지
            n = testcase[t][1:]
            result = list(combinations(n,6)) # combination 결과는 튜플, 오름차순으로 나온다.
            for i in range(len(result)):
                print(' '.join(list(map(str, result[i]))))
        print()
if __name__ == '__main__':
    main()
cs

🧙‍♂️ 해설

 

- combinations로 쉽게 해결하였다..

📈 새로 학습한 것 & 실수 

- combinations 함수는 결과를 튜플로 오름차순으로 내보낸다. 이 때문에 결과물을 sort하면 튜플이라 불가능하다. 이를 리스트로 바꾸려면 요소를 일일이 바꿔주어야 한다.

 

- if name main에서 나는 name에도 ""가 들어가는줄 알았지만 main에만 들어간다.

 

- main을 def로 선언할 때 import를 바깥에서 선언하면 동작하지 않는다. 함수 안에서 선언해야한다.

 

- k, *s = list(map(int, input().split())) 로 선언하면 첫번째 값만 k가 되고 나머지는 리스트로 s가 된다. (요소가 2개일경우    *가 없어도 되지만 3개 이상이면 s자리에 2개 이상의 요소가 들어가야하므로 크기가 정해지지 않았다는 표시로 *이

  필요하다.

반응형
댓글