[ハッカーランキング]Journey to the Moon
13968 ワード
質問リンク
https://www.hackerrank.com/challenges/journey-to-the-moon/problem
Problem
The member states of the UN are planning to send people to the moon. They want them to be from different countries. You will be given a list of pairs of astronaut ID's. Each pair is made of astronauts from the same country. Determine how many pairs of astronauts from different countries they can choose from.
国連加盟国は月に人を派遣する計画だ.彼らは彼らが異なる国から来ることを望んでいる.宇宙飛行士IDのリストがあります.どのペアも同じ国からの宇宙飛行士で構成されています.他の国の何組かの宇宙飛行士を選ぶことができることを決めてください.
問題はパパゴ翻訳です.
Example
n = 4
astronaut = [1, 2], [2, 3]
4人の宇宙飛行士がいて、番号は0、1、2、3です.[0]このような国、[1,2,3]はこのような国です.
[0,1],[0,2],[0,3]と同じ組み合わせで宇宙に入ることができます.
エラーの回答
私のように問題を解く人がいないことを望んでいます.
import math
import os
import random
import re
import sys
from itertools import combinations
def journeyToMoon(n, astronaut):
# 같은 국가가 없는 경우 -1
k = dict()
for _ in range(0, n):
k[_] = -1
# 같은 국가가 있는 지 확인
# 다음 작업을 하였을 때 나오는 결과물
# k = {0: -1, 1: 0, 2: 0, 3: 0}
for i, a in enumerate(astronaut):
if k[a[0]] == -1 and k[a[1]] != -1:
k[a[0]] = k[a[1]]
elif k[a[0]] != -1 and k[a[1]] == -1:
k[a[1]] = k[a[0]]
elif k[a[0]] == -1 and k[a[1]] == -1:
k[a[0]], k[a[1]] = i, i
# 각각이 같은 국가가 있는데, 각각의 수가 다른 경우
# 더 작은 수로 국가를 통일하기 위해서 하는 작업
else:
little_min = 0
_min = 0
if k[a[0]] > k[a[1]]:
little_min = k[a[0]]
_min = k[a[1]]
else:
little_min = k[a[1]]
_min = k[a[0]]
for i in range(n):
if k[i] == little_min:
k[i] = _min
# 다음 작업을 하였을 때 나오는 결과물
# nation: {-1: [0], 0: [1, 2, 3]}
nation = dict()
for _ in k:
if not k[_] in nation:
nation[k[_]] = list()
nation[k[_]].append(_)
# 국가번호만 추출(combinations 모듈을 사용하기 위해서 하는 작업)
# 다음 작업을 하였을 때 나오는 결과물
# nation_num: [-1, 0]
nation_num = list()
for n in nation:
nation_num.append(n)
# 국가간 나올 수 있는 조합 구하기
# 다음 작업을 하였을 때 나오는 결과물
# nation_combination: [(-1, 0)]
nation_combination = list(combinations(nation_num, 2))
# 정답 구하기
answer = 0
for _ in nation_combination:
answer += len(nation[_[0]]) * len(nation[_[1]])
# nation[-1]에 속해있는 astronaut는 같은 국가가 아니기 때문에 각 astronaut을 다른 국가로 보고 nation[-1]의 조합을 구한다.
if -1 in nation:
answer += len(list(combinations(nation[-1], 2)))
return answer
10個のhackosを使用して2つのtestcaseを調べた.testcase 8を調べると、10000人の宇宙飛行士がいることがわかり、答えは正しいに違いない.
でも间违っているのは、あまり効率的に编んでいないかららしい.
今度頭がもっとはっきりしたら、その時になったらリラックスしなければなりません.
Reference
この問題について([ハッカーランキング]Journey to the Moon), 我々は、より多くの情報をここで見つけました https://velog.io/@nayoon-kim/해커랭크-Journey-to-the-Moonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol