백준 1039:교환 Python (Combination과 tuple)

백지원·2023년 8월 8일
0

핵심 포인트

from itertools import combinations

combination을 이용해서 아래와 같이 쓰기
방법 1

dic = list(combinations(range(M),2))
for a, b in dic

방법 2

for a, b in list(combinations(range(M),2)):

에러 조심

int_list = [1, 2, 3, 4, 5, 6, 7]
result = ''.join(int_list)
# TypeError: sequence item 0: expected str instance, int found

int형의 list를 join하려고 보면 이러한 에러가 생긴다.
join할 때는 string이 들어가야 하나 int가 들어가면 발생하는 에러이다.

T = set()
T.add(list(N))
# TypeError: unhashable type: 'list'

set에 들어가는 값들은 해쉬 가능해야한다.
그래서 문자열, 숫자, 튜플만 set에 넣으면 중복 제거가 가능하다.
.
.
.
밑에는 테스트 코드 돌리기 위함

import sys
input = sys.stdin.readline

v = [(16375,1),(132,3),(432,1),(90,4),(5,2),(436659,2),(1,1),(1,10),(10,1),(10,2),(12,2),(100,1),(100,5),(1000000,10),(210,1),(1220,2),(135745,5),(135745,6),(135745,7),(404,1),(404,2),(4040,1),(4040,2),(4044,1),(4044,2),(8404,1),(8404,2),(3404,1),(3404,2),(3404,3),(199,1),(8799,2),(123444,3),(213444,3),(321444,3),(123444,4),(123455,1),(123455,2)]= [76315,312,423,-1,-1,966354,-1,-1,-1,-1,12,100,100,1000000,201,2210,755431,755431,755431,440,440,4400,4400,4440,4440,8440,8440,4403,4430,4430,991,9987,444321,444321,444321,444321,523451,553421]
for vv in range(len(v)):
    N, K = v[vv][0], v[vv][1]
    N = str(N)
    M = len(N)
    N = tuple(N)
    
    if M == 1:
        ans = -1
    elif M == 2 and N[1]=='0':
        ans = -1
    else:
        arr = [N]
        from itertools import combinations
        for _ in range(K):
            T = set()
            dic = list(combinations(range(M),2))
            for n in arr:
                for a, b in dic:
                    newn = list(n)
                    newn[a], newn[b] = newn[b], newn[a]
                    T.add(tuple(newn))
            arr = sorted(list(T))
        ans = int("".join(arr[-1]))
    if[vv] != ans:
        print(vv)
        print(int("".join(N)), K)
        print('vv:',[vv],'ans:',ans)
        print('-----------------')

0개의 댓글