from math import gcd
def solution(arrayA, arrayB):
a = arrayA[0]
b = arrayB[0]
for i in arrayA:
a = gcd(a, i)
for i in arrayB:
b = gcd(b, i)
for i in arrayB:
if i % a == 0:
a = 0
break
for i in arrayA:
if i % b == 0:
b = 0
break
return max(a, b)
return answer
< 풀이 과정 >
두 배열의 최대공약수를 구한 이후 각 배열의 최대공약수가 상대 리스트 내 값 중 하나라도 나눌 수 있다면 0을 리턴해주기 위해 값을 0으로 처리하고 break 조건 걸어주기
양쪽 모두 결과를 진행하기 위해 for문으로 양 배열을 순회한 후 나눌 수 있는 값이 있다면 0처리해주는 것이 핵심!
def solution(cards):
answer = []
for i in range(len(cards)):
group = []
while cards[i] not in group:
group.append(cards[i])
i = cards[i] - 1
if sorted(group) not in answer:
answer.append(sorted(group))
else:
answer.append([])
answer.sort(key = lambda x: len(x))
return len(answer[-2]) * len(answer[-1])
< 풀이 과정 >
문제가 길어보이지만, 실제로 이해만 한다면 구현은 크게 어렵지 않은 문제.
1. cards 리스트 내 for문으로 모든 인덱스를 순회하는데, 0번 인덱스부터 선택하여 0번 인덱스에 존재하는 cards 리스트값을 다음 인덱스로 선택하며 그룹을 형성해준다.
2. 그룹은 똑같은 숫자가 더 이상 안들어갈때까지 반복해준다.
3. 정답 리스트에 정렬한 그룹이 없으면 추가해준다. (정렬을 안하는 순간 순서가 바뀌어도 입력되는 경우가 있으므로)
4. 정렬한 그룹이 있다면, 이는 그룹 형성이 이미 된 것을 의미하므로 빈 리스트를 추가해준다. 원래 continue를 적용하여 제출하였으나 2번 테케에서 런타임에러가 뜨는 걸 보니 전부 빈 리스트인 듯 합니다.
5. 이후 answer 2중 리스트를 크기 순으로 오름차순 정렬하여 젤 뒤에 있는 리스트 2개의 길이를 곱하여 결과 리턴한다.