본문 바로가기

Python 코딩테스트

정렬: 백준 18868 파이썬

반응형

문제:

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

 

18868번: 멀티버스 Ⅰ

M개의 우주가 있고, 각 우주에는 1부터 N까지 번호가 매겨진 행성이 N개 있다. 행성의 크기를 알고 있을때, 균등한 우주의 쌍이 몇 개인지 구해보려고 한다. 구성이 같은데 순서만 다른 우주의 쌍

www.acmicpc.net

 

정답:

m, n = map(int, input().split())

array = []
result = 0

for i in range(m):
    array.append(list(map(int, input().split())))

# 각 리스트 행을 크기 순서로 바꾸어 주는 이중 반복문
# ex. [12 50 31] -> [1, 3, 2]
for i in range(m):
    array_sort = sorted(array[i])
    temp = []
    for j in array[i]:
        temp.append(array_sort.index(j)+1)
    array[i] = temp

# 크기 순서로 바꾸어준 리스트 행이 같으면 result + 1
for i in range(m-1):
    for j in range(i+1, m):
        if array[i] == array[j]:
            result += 1
print(result)

 

풀이: 

이 문제의 핵심은 각 우주의 행성 크기 순서가 같으면 같은 우주라는 것이다.

다시 말해, [1, 3, 2]와 [12, 50, 31] 이 두 우주가 있을 때 이를 행성 크기 순서로 바꾸면 [1, 3, 2]와 [1, 3, 2]로 바뀐다.

이렇게 행성 크기 순서가 같으면 같은 우주로 판단하고 출력할 결과에 +1을 해주면 된다.

 

리스트를 크기 순서로 바꾸어주는 코드는 구글링을 했다. 잘 숙지해놓고 있으면 한 번쯤은 써먹을 수 있을 것 같다.   

 

 

반응형

'Python 코딩테스트' 카테고리의 다른 글

정렬: 백준 11650 파이썬  (0) 2021.08.29
정렬: 백준 2108 파이썬  (0) 2021.08.29
정렬: 백준 11004 파이썬  (0) 2021.08.23
DFS/BFS: 백준 1260 파이썬  (0) 2021.08.18
DFS/BFS: 백준 2606 파이썬  (0) 2021.08.18