반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[프로그래머스/Java] 코딩테스트 Lv.0 배열의 유사도 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/나의 코딩테스트

[프로그래머스/Java] 코딩테스트 Lv.0 배열의 유사도

yeonee 여니 2023. 9. 26. 19:20
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

 

 

🪅 나의 문제 풀이

//시도1
import java.util.Arrays;
class Solution {
    public int solution(String[] s1, String[] s2) {
        int answer = 0;
//         if(Arrays.equals(s1, s2)){
//             return result = 1;
//         }
//         return result = 0;
        
        for(int i = 0; i<s1.length; i++){
                    
            for(int j = 0; j<s2.length; j++){
               if(s1[i] == s2[j]){
                   break;
               };
            }
        }
        return answer;  
    }
}

 

[ 테스트 통과 ]

import java.util.Arrays;
class Solution {
    public int solution(String[] s1, String[] s2) {
        int answer = 0;
        
        for(int i = 0; i<s1.length; i++){
            for(int j = 0; j<s2.length; j++){
               if(s1[i].equals(s2[j])){
                   answer++;
               }
            }
        }
         return answer;   
    }
}


[ 해결 방안 ]

if문을 이용해 result값에 따라 같은 원소 개수를 return하는 식으로 세우려고 했으나, 식이 복잡해지는거 같아서 사용하지 않음. 배열을 비교하고자 할 때는 s1, s2가 각각의 주소값을 지니고 있으므로 == 으로 비교하면 안되고 equals로 비교해야함.
시도 2때는 테스트 2번 사례만 통과되어, String 타입의 배열이라 어떻게 answer값을 반환할지 좀 더 생각해보았습니다.

 

🧸 코드설명

먼저, 두 배열을 동일한 문자열 요소의 개수를 저장할 변수 answer을 생성 및 초기화시켜줍니다.
s1의 배열의 길이만큼 for 반복문을 돌립니다. 내부 반복문으로 s2의 배열의 길이만큼 for 반복문을 돌려줍니다.
두 배열의 중복되는 요소를 if문 조건식에 equals() 메서드를 사용하여 비교합니다. 두 배열을 비교하여 같은 문자열 요소가 있을시 answer 변수의 개수를 +1 해줍니다. 반복문과 조건문을 통해, 두 배열의 길이가 반복, 비교되어 최종 return되는 answer에는 두 배열의 동일한 문자열 요소의 개수가 반환되게 됩니다.
은근 간단한 반복문 활용인데, 문자열 비교가 껴서 살짝 헷갈렸던 것이 있었네요. 실무 적용시 좀 더 주의하여 사용해야 하겠습니다.

 

다른 풀이

풀이1) 

문자열 비교에 대해 검색해보면서 보기도 했던 내용인데, 파이널 프로젝트에서 map과 hashMap정도만 사용해본지라 이만큼 적용하기 조금 버벅대는감이 있어서 사용하지 않았던 코드지만.... 코드를 분석해보면 안써본 구문 빼고 의외로  해석할 수 있는 내용이기도 합니다.
Arrays.asList(s1)구문은 s1배열을 리스트로 변환합니다. 그 리스트를 HashSet으로 초기화해줍니다. 그러면 set에는 s1 배열의 문자열 요소가 담기게 됩니다. filter(set::contains)에서 s2를 스트림(stream)으로 변환해서, 스트림에서 set에 포함된 요소(set::contains)만 필터링(filter)하고 그 요소의 개수를 (count)셉니다. count()메서드의 반환값은 (int)로 형변환해주었기 때문에 결과값은 동일한 요소의 개수가 출력되게 됩니다.
이렇게 생각해서 정리하여 적는 부분도 은근 시간이 걸리네요 ㅠㅠ

 

풀이2) 

위의 스트림과 비슷한듯 한 코드지만, 직접 s1Element요소를 이용하여 포함여부를 따져서 개수를 세는 방법도 있더라구요. 정말 코테신들이 많은거 같아요... 저도 너무 잘하고 싶습니다 ㅠㅠ

 

풀이3)

이렇게 작성하는 반복문도 가독성이 좋은거 같아요!

 

풀이4)

해석 풀이 없이 보기엔 내가 익숙하던 list 형태가 좀더 거부감이 없더라구요;;ㅎㅎ

728x90
반응형
LIST