https://school.programmers.co.kr/learn/courses/30/lessons/120903
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
01. 나의 풀이 코드
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;
}
}
// 1차로 작성했던 코드
int len = s1.length > s2.length? s1 : s2;
// 배열의 각 요소를 비교
for (int i = 0; i < len; i++) {
if (s1[i].equals(s2[i])) {
count++;
}
}
배열의 길이가 다르기 때문에 루프 돌려야 하는 길이를 어떻게 할까 하다가 아래처럼 길이를 써봤지만, 테스트 시나리오에서 1개만 통과되었기 때문에 이중 for문을 사용했다.
그러다가 길이가 다른 두 배열에서 교집합만 뽑아 내는 코드는 없을까 해서 챗gpt 한테 물어본 코드는 이러했다.
import java.util.HashSet;
import java.util.Set;
public class ArrayIntersection {
public static void main(String[] args) {
// 예시 배열들
String[] array1 = {"apple", "banana", "cherry", "apple"};
String[] array2 = {"banana", "apple", "date", "cherry"};
// 교집합을 저장할 Set
Set<String> intersection = new HashSet<>();
// 첫 번째 배열의 요소들을 Set으로 변환
Set<String> set1 = new HashSet<>();
for (String s : array1) {
set1.add(s);
}
// 두 번째 배열의 요소들을 하나씩 비교하여 교집합 찾기
for (String s : array2) {
if (set1.contains(s)) {
intersection.add(s);
}
}
// 교집합 출력
System.out.println("교집합: " + intersection);
}
}
Java에서 Set은 분리된 요소를 허용하지 않는, 교집합을 구하는 데 적합하다고 한다.
1. **`Set` 사용**: `Set`은 중복된 요소를 허용하지 않기 때문에 교집합을 구하는 데 적합합니다. `HashSet`을 사용하여 배열의 요소를 저장하고 비교합니다.
2. **첫 번째 배열의 요소들을 `Set`에 추가**: `array1`의 모든 요소를 `set1`에 추가합니다. 이렇게 하면 중복된 요소 없이 배열의 모든 요소가 `set1`에 저장됩니다.
3. **교집합 찾기**: `array2`의 요소를 하나씩 순회하면서, 그 요소가 `set1`에 존재하는지 확인합니다. 존재한다면, `intersection`이라는 교집합을 저장할 `Set`에 추가합니다.
4. **결과 출력**: 최종적으로 `intersection`에는 두 배열 간의 교집합이 저장되며, 이를 출력합니다.
### 실행 결과:
주어진 예시에서 배열 `array1`과 `array2`의 교집합은 `"apple", "banana", "cherry"`가 됩니다. 따라서 출력은 다음과 같습니다:
교집합: [banana, cherry, apple]
이 코드는 길이가 다른 두 배열에서도 제대로 작동하며, 두 배열의 공통된 요소들을 찾아낼 수 있습니다.
'Study > Code Review' 카테고리의 다른 글
[프로그래머스] 문자열 내 p와 y의 개수 (0) | 2022.02.13 |
---|---|
[프로그래머스] 문자열 다루기 (0) | 2022.02.06 |
[프로그래머스] 자리수 더하기 (0) | 2022.01.27 |
[프로그래머스] 콜라츠 추측(자바) (0) | 2022.01.16 |
DAY 92. JavaScript 배열 연습 문제 - 배열에 추가, 삭제 (0) | 2021.11.18 |