현대 모비스 경진대회 “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
[여담]
정답을 확인할 수 없기 때문에 가지고 있는 테스트 케이스를 만족하는 수준까지만 풀이를 진행하였습니다.
문제에 대해서 틀린 점 혹은 다른 해석은 언제나 환영합니다. (상단의 이메일 참고)