공개소프트웨어공학

[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