공개소프트웨어공학
[LeetCode] Merge Similar Items
yeop_
2022. 12. 2. 20:10
2363. Merge Similar Items
문제 (한글 해석)
- 두 개의 항목 집합을 나타내는 두 개의 2D 정수 배열인 항목 1과 항목 2가 제공됩니다. 각 어레이 항목에는 다음과 같은 속성이 있습니다.
items[i] = [valuei, weighti] 여기서 value i는 값을 나타내고 weighti는 i번째 항목의 무게를 나타냅니다.
항목의 각 항목 값은 고유합니다.
2D 정수 배열을 반환합니다. 여기서 ret[i] = [valuei, weighti]는 값 i를 가진 모든 항목의 가중치 합계입니다.
참고: 값별로 오름차순으로 ret를 반환해야 합니다.
문제 분석
- 이 문제는 2차원 배열이 [value, weight]로 주어진다.
item 2개의 value가 같은 경우 weight를 더할 수 있다.
Ex) Input : (Item1: [[1, 2], [2, 5]], Item2: [[1, 5], [2, 6], [5, 7]]) => Output : [[1, 7], [2, 11], [5, 7]]
해결
- Item1을 기준으로 반복문을 돌고 Item2를 기준으로 2중 반복문을 돌면서 item1과 2의 value 값을 비교한 후 같은 경우 weight를 더해주어 결과 배열에 넣어준다.
만약 item1과 2에서 value가 같지 않는 경우가 존재할 수 있으므로 마지막에 1과 0으로 구분되어있는 check 배열을 다시 한번 돌아주어 남은 배열을 결과 배열에 넣어주고 오름차순 정렬을 하여 반환한다.
코드
class Solution:
def mergeSimilarItems(self, items1: List[List[int]], items2: List[List[int]]) -> List[List[int]]:
rlt = []
items1_check = [0 for i in range(len(items1))]
items2_check = [0 for i in range(len(items2))]
for i in range(len(items1)):
weight = items1[i][1]
for j in range(len(items2)):
if items1[i][0] == items2[j][0]:
weight += items2[j][1]
items1_check[i] = 1
items2_check[j] = 1
rlt.append([items1[i][0], weight])
break
for i in range(len(items1_check)):
if items1_check[i] == 0:
rlt.append(items1[i])
for i in range(len(items2_check)):
if items2_check[i] == 0:
rlt.append(items2[i])
rlt.sort()
print(rlt)
return rlt