프로그래머스 코딩테스트 입문 0단계 문제입니다
https://school.programmers.co.kr/learn/courses/30/lessons/120903
📢 문제 설명
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.
⭕ 정답 코드
1) List 사용
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(String[] s1, String[] s2) {
int answer = 0;
List<String> s2List = Arrays.stream(s2).collect(Collectors.toList());
for(String s : s1)
if(s2List.contains(s))
answer++;
return answer;
}
}
🔍 해설
① 문자열 배열 s2을 stream을 사용해서 List로 변환한다
② s1 배열로 foreach 반복문을 돌면서
③ s2 문자열 리스트에 s1의 요소가 있으면 answer에 1씩 더해준다
2) HashSet 클래스 사용
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(String[] s1, String[] s2) {
HashSet<String> set = new HashSet<>(Arrays.asList(s1)); //s1 배열로 해시셋 생성
return (int)Arrays.stream(s2) //s2 배열로 Stream 생성
.filter(set::contains) //s2 데이터들 중 해시셋에 포함된 것만 남긴다
.count(); //필터링된 데이터들의 개수 카운팅
}
}
🔍 해설
주석에 더 상세하게 설명해놨습니다
① 문자열 배열 s1으로 HashSet을 생성한다
② 문자열 배열 s2로 스트림을 생성한다
③ 스트림(s2)에서 해시셋(s1)에 있는 데이터만 남기게 필터링한다
④ 스트림에 남아있는 데이터들의 개수를 카운트해서 리턴한다
⑤ 스트림 count()의 반환형은 long이기 때문에 (int)로 형변환시켜준다
✅ 반성할 점
처음에는 이중for문으로 문제를 풀었다 (효율꽝)
문자열 List로도 contains() 메서드를 사용할 수 있다는 것과
HashSet이라는 데이터 클래스를 더 공부해야한다
📒 기억하고 갈 문법
1) 문자열 리스트에서도 contains를 할 수 있다!
문자열 리스트.contains("문자열"); //완전 가능
2) HashSet이란?
📖정의
- Set 인터페이스에서 지원하는 구현 클래스
- 순서대로 입력되지 않는다
- 중복을 허용하지 않는다 (중요)
전혀 어려운 개념이 아니다!!!
필자는 이름만 보고 겁을 살.짝 먹었는데
전혀 어렵지 않다
핵심만 다시 말하자면
▶️ 배열, 리스트처럼 데이터를 넣을 수 있는 클래스
▶️ 그렇지만 배열처럼 순서가 정해져서 데이터가 삽입되진 않는다
▶️ HashSet의 제일 중요한 키워드는 "중복X"이다
▶️ 중복 없이 데이터를 넣을 수 있는 클래스라고 보면 된다
🚩선언하기
HashSet<String> set1 = new HashSet<String>();
HashSet<Integer> set2 = new HashSet<Integer>();
HashSet<데이터타입> 변수명 = new HashSet<데이터타입>();
🚩데이터 삽입/삭제
//삽입
set1.add(1);
set1.add(2);
set2.add("a");
set2.add("b");
//삭제
set1.remove(1);
set2.remove("a");
🚩데이터 검색
set2.contains("a"); //true or false
*참고 블로그: https://crazykim2.tistory.com/474 더 많은 정보는 이곳에서 확인하세요
'코딩테스트 스터디' 카테고리의 다른 글
코딩테스트 연습 - 인덱스 바꾸기 (JAVA) (0) | 2023.01.19 |
---|---|
코딩테스트 연습 - 치킨 쿠폰 (JAVA) (0) | 2023.01.19 |
코딩테스트 연습 - 문자열안에 문자열 (JAVA) (0) | 2023.01.12 |
코딩테스트 연습 - 문자열 정렬하기 (2) (JAVA) (0) | 2023.01.11 |
코딩테스트 연습 - 제곱수 판별하기 (JAVA) (0) | 2023.01.11 |