Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 규칙과 일치하는 항목 개수 구하기

배열 items가 있다고 가정해 보겠습니다. 각 items[i]는 [type_i, color_i, name_i] 형태의 세 가지 요소를 담고 있으며, 이는 i번째 아이템의 종류(type), 색상(color), 이름(name)을 나타냅니다. 여기에 더해, 두 개의 문자열 ruleKeyruleValue로 표현되는 규칙이 하나 주어집니다.

i번째 아이템이 이 규칙과 일치한다고 판단할 수 있는 조건은 다음 중 하나입니다.

  • ruleKey = "type"이고 ruleValue = type_i인 경우
  • ruleKey = "color"이고 ruleValue = color_i인 경우
  • ruleKey = "name"이고 ruleValue = name_i인 경우

즉, 우리가 구해야 하는 것은 전체 아이템 중에서 규칙에 부합하는 항목의 개수입니다.

문제 예시

입력이 다음과 같다고 가정해 보겠습니다.

종류색상이름
BikeblueElecB
CarsilverSumo
BikeblueTVS

이때 ruleKey = "color", ruleValue = "blue"라면 어떻게 될까요? ["Bike","blue","ElecB"]와 ["Bike","blue","TVS"] 두 항목이 색상 조건을 만족하므로, 출력값은 2가 됩니다.

해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 카운터 변수 count를 0으로 초기화합니다.
  • ruleKey가 "type"이라면 → 모든 아이템을 순회하면서 items[i][0]이 ruleValue와 같으면 count를 1 증가시킵니다.
  • ruleKey가 "color"라면 → 모든 아이템을 순회하면서 items[i][1]이 ruleValue와 같으면 count를 1 증가시킵니다.
  • ruleKey가 "name"이라면 → 모든 아이템을 순회하면서 items[i][2]가 ruleValue와 같으면 count를 1 증가시킵니다.
  • 최종적으로 count를 반환합니다.

Python 구현 코드

def solve(items, ruleKey, ruleValue):
    count = 0
    if ruleKey == "type":
        for i in range(len(items)):
            if items[i][0] == ruleValue:
                count += 1
    if ruleKey == "color":
        for i in range(len(items)):
            if items[i][1] == ruleValue:
                count += 1
    if ruleKey == "name":
        for i in range(len(items)):
            if items[i][2] == ruleValue:
                count += 1
    return count

items = [["Bike","blue","ElecB"],["Car","silver","Sumo"],["Bike","blue","TVS"]]
ruleKey = "color"
ruleValue = "blue"
print(solve(items, ruleKey, ruleValue))

입력

[["Bike","blue","ElecB"],["Car","silver","Sumo"],["Bike","blue","TVS"]], "color", "blue"

출력

2

추가 개선: 딕셔너리 활용

위 코드는 if문이 반복되어 다소 길게 느껴질 수 있습니다. 인덱스 매핑을 딕셔너리로 처리하면 코드를 훨씬 간결하게 만들 수 있습니다.

def solve(items, ruleKey, ruleValue):
    key_index = {"type": 0, "color": 1, "name": 2}
    idx = key_index[ruleKey]
    return sum(1 for item in items if item[idx] == ruleValue)

이처럼 규칙 키에 해당하는 열 인덱스를 미리 정의해 두면, 단 한 줄의 순회로 문제를 해결할 수 있습니다. 시간 복잡도는 O(n)으로 동일하지만, 코드의 가독성과 유지보수성이 크게 향상됩니다.