문제 설명
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 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 |