현대 모비스 경진대회 “4번” 문제를 풀어보았습니다.

혹시 해당 포스팅이 저작권상 문제가 되는 경우 이메일로 연락을 주시면 조치하도록 하겠습니다.

이메일 - jano.jeon@gmail.com


Solution

문제를 유출하지 말라는 조건이 있었기 때문에 문제는 생략하고 본인의 문제에 대한 이해 부분과 코드만 작성했습니다.

[문제 이해]

  • 하나의 리스트의 원소들을 변형해서 다른 리스트의 원소들 형태로 구성 가능 여부
  • p값으로 생성 가능한 리스트 필요
    → 조합
  • p값 중 가장 작은 값이 q값 중 가장 작은 값보다 크면 false

이해한 내용을 바탕으로 코드를 작성했습니다.

[코드]

from itertools import combinations

def solution(p, q):
    answer = []
    for x, y in zip(p, q):
        # y에 x보다 더 작은 값이 존재하면 만들 수 없음
        if min(x) > min(y):
            answer.append(False)
            continue

        # x로 생성 가능한 조합
        # {idx: [조합 숫자 2개, 숫자의 합]}
        sum_data = {i: [c, sum(c)] for i, c in enumerate(combinations(x, 2))}

        for i in sum_data:
            if sum_data[i][1] in y:
                x[x.index(sum_data[i][0][0])] = sum_data[i][1]
                del x[x.index(sum_data[i][0][1])]
            else:
                continue
            if x.sort() == y.sort():
                answer.append(True)
                break
        # 생성 가능 조합 모두 확인해도 없으면 false처리
        else:
            answer.append(False)

    return answer

[여담]

정답을 확인할 수 없기 때문에 가지고 있는 테스트 케이스를 만족하는 수준까지만 풀이를 진행하였습니다.

문제에 대해서 틀린 점 혹은 다른 해석은 언제나 환영합니다. (상단의 이메일 참고)