본문 바로가기
Coding Test

230924 배열의 유사도 - Level 0

by mmm- 2023. 9. 24.

문제 설명

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ s1, s2의 길이 ≤ 100
  • 1 ≤ s1, s2의 원소의 길이 ≤ 10
  • s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
  • s1과 s2는 각각 중복된 원소를 갖지 않습니다.

 

입출력 예

 

입출력 설명

입출력 예 #1

  • "b"와 "c"가 같으므로 2를 return합니다.

입출력 예 #2

  • 같은 원소가 없으므로 0을 return합니다.

코드

import java.util.*;

class Solution {
    public int solution(String[] s1, String[] s2) {
        int answer = 0;
        Map<String, String> map = new HashMap<>();
        
        for(String s1Word : s1) {
            map.put(s1Word, s1Word);
        }
        
        for(String s2Word : s2) {
            if(map.get(s2Word) != null) answer++;
        }
        
        
        return answer;
    }
}

 

풀이

HashMap 을 사용하여 key, value에 s1 을 넣어준 후, s2배열의 데이터가 있는지 확인하여 있으면 answer을 1만큼 증가시킨다.


다른 코드와 풀이

아래의 코드는 다른 사람들이 작성한 것들로, 내 코드와 비교, 참고하기 위해 가져왔다.

 

import java.util.*;
class Solution {
    public int solution(String[] s1, String[] s2) {
        Set<String> set = new HashSet<>(Arrays.asList(s1));
        return (int)Arrays.stream(s2).filter(set::contains).count();
    }
}

s1 배열의 문자열들을 HashSet에 저장한다. s2 배열을 스트림으로 변환하여 s1의 내용을 포함하고 있는지 확인 후, 포함하고 있다면 count를 통해 갯수를 센다.

 


정리

HashSet

: 컬렉션의 하나로 중복되지 않는 데이터를 순서에 상관없이 저장

  • 중복 허용하지 않아 자동으로 중복 제거해줌
  • null 허용

 

asList()

: 읽기 전용 배열을 반환

  • ArrayList보다 배열 쉽게 생성 가능
List<Integer> integers1 = Arrays.asList(1, 2, 3);


List<Integer> integers2 = new ArrayList<>();
integers2.add(1);
integers2.add(2);
integers2.add(3);
  • 읽기 전용
  • 기존 배열과 주소 공유

'Coding Test' 카테고리의 다른 글

230925 머쓱이보다 키 큰 사람 - Level 0  (0) 2023.09.25
230924 자릿수 더하기 - Level 0  (0) 2023.09.24
230924 짝수 홀수 개수 - Level 0  (0) 2023.09.24
230923 배열 자르기 - Level 0  (0) 2023.09.23
230923 편지 - Level 0  (0) 2023.09.23