[알고리즘.java] 리트코드 Count Items Matching a Rule 을 풀어보자 [키워드 : 문자열 ]

2

알고리즘

목록 보기
11/11
post-custom-banner

문제

우선 풀기 전 문제를 이해를 해보도록하자

items라는 배열안에 각각 값들이 주어졌다.

순서대로 type , color , name 순이다 이후 다음 중 하나가 참일 경우 규칙과 일치하다고 한다.

ruleKey 가 type이면 ruleValue도 type 이다

다른 예로 들자면 ruleKey가 color면 ruleValue는 color의 값중 하나 예를들어 sliver 이런 식 일 것이다.

이 후 key값에 따른 value값으로 items 안에 어떤 인덱스가 value값을 포함하고 있는지 찾는 문제이다.

자 이제 입력 예시를 한번 보도록하자

List<List<String>> 형태로 들어가 있는 리스트 가 있다.

그림으로 표현하자면

이런 형태일 것이다 ( 악필 ㅈㅅ )

자 여기서 문제에 대해서 다시한번 떠올려보자

배열안에 들어가는 유형은 순서가 보장된다 절때 바뀌지않는다

그렇다면 key에 따라서 바뀌는 value값으로 배열에 있는 값을 비교해 탐색해주면 되지않을까 ?

라는 기가막힌 생각을 하게 된거다.

자 이제 코드를 써내려가 보도록하자.

int searchTpye = 0;

유형을 탐색해 줄 변수를 하나 만들어두자

이후

if(ruleKey.equals("color")){
            searchType = 1;
        }

        if(ruleKey.equals("name")){
            searchType = 2;
        }

각각 key에 따라 변수의 값을 재정의 해주자

key의 값에 따라서 value값이 바뀐다 
0은 기본 type , 1은 color , 2는 name 으로 바뀔것이다.
이후 우리의 정답이 될 변수를 하나 만들어주자
int answer = 0;

이후에 key값으로 인해 변화된 serachType 녀석으로 순회하며 ruleValue와 맞는 녀석이 나온다면 matches++ 시켜 답을 얻어가주자

 for (int i = 0; i < items.size(); j++) {
          if(items.get(i).get(searchType).equals(ruleValue)){
                matches++;
           }
       }

이 코드가 이해가 가지 않는다면 아래 그림으로 설명해 보겠다

대충 여태 설명한 걸 그림으로 표현하면 이렇게 될 것이다

이제 key값의 유형에따라서 searchData의 값이 바뀔것이다.

type이면 기본적으로 0
color면 1
name면 2로

왜 이렇게 만들수 있는 그이유는

바로 배열안에 주어진 유형의 순서가 절대 변하지 않기 때문이다.

이제 for문에서 searchData(searchTpye 이였네용 죄송 ㅎㅎ ㅋㅋ ㅈㅅ!! )값으로 배열을 탐색해 값이 있으면 값을 증가 시켜주면 된다.

profile
배운것을 끄적끄적 올리는 개발 블로그
post-custom-banner

2개의 댓글

comment-user-thumbnail
2024년 6월 17일

와 짱이예요

1개의 답글