문제
우선 풀기 전 문제를 이해를 해보도록하자
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 이였네용 죄송 ㅎㅎ ㅋㅋ ㅈㅅ!! )값으로 배열을 탐색해 값이 있으면 값을 증가 시켜주면 된다.
와 짱이예요