ABC150 C - Count Order를 풀었다






이번에는 문제를 알기 쉽다.
언제나 잊어버려, permutation 어떻게 그리는 거야?

참고로, 전 탐색해 보았다.
2 < N < 8 이므로 살아났다.

CountOrder.py
n = int(input())
P = list(map(int,input().split()))
Q = list(map(int,input().split()))

P = "".join(list(map(lambda x:str(x),P)))
Q = "".join(list(map(lambda x:str(x),Q)))

from itertools import permutations
i = 1
dic={}
for nums in permutations(range(1,n+1)):#O(40000)
    #print(nums)
    nums = list(nums)
    nums = "".join(list(map(lambda x:str(x),nums)))#O(8)
    dic[nums] = i
    i += 1

print(abs(dic[P]-dic[Q]))#114ms

permutation은 사전순으로 나온다.
그래서 출력과 무엇을 출력했는지를 기록하는 i가 있으면
테이블은 간단하게 할 수 있다.

후에는 빼기뿐이다!!

그럼. . 재챌린지

abc150c.py
N = int(input())
P = list(input().split())
P = "".join(P)
Q = list(input().split())
Q = "".join(Q)
from itertools import permutations
lis = []

for i in permutations(map(str,range(1,N+1)),N):
    lis.append("".join(i))

print(abs(lis.index(P)-lis.index(Q)))#40ms

조금 심화할 수 있었을지도.

좋은 웹페이지 즐겨찾기