본문 바로가기
Java/프로그래머스

[프로그래머스/JAVA] 배열의 유사도

by 녹녹1 2023. 9. 12.

문제 설명

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


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

 

입출력 예


입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

내가 풀이한 방법

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

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();
    }
}

다른 사람이 풀이한 방법2

import java.util.HashSet;
import java.util.List;
class Solution {

    public int solution(String[] s1, String[] s2) {
        int answer = 0;
        HashSet<String> set = new HashSet<>(List.of(s1));
        for (String s : s2) {
            if(set.contains(s)){
                answer++;
            }
        }
        return answer;
    }
}

 

다른 사람들의 코드를 보니 HashSet을 사용한 방법이 꽤 있었다.

 

그런데 s1배열을 초기값으로 저장할 때 Arrays.asList()를 사용한 사람도 있고 List.of()를 사용한 사람도 있었는데  이 두 개의 차이점이 무엇인지 궁금했다.

 

자바에서 Array를 List로 변환하기 위해서는 Arrays.asList(array)를 사용하는데 Java9버전부터는 List.of(array)를 도입했다고 한다. 

 

두 개의 차이점은 크게 아래처럼 있다는 것을 알 수 있었다.

 

  • Arrays.asList()는 크고 동적인 데이터에 사용하고, List.of()는 작고 변경되지 않는 데이터의 경우 사용합니다.
  • List.of()는 필드 기반 구현이 있고, 내부적으로 힙 공간을 덜 사용하기에 요소 자체가 필요하다면 List.of()가 적절합니다.
  • Arrays.asList()는 변경이 가능하고 thread safety 하지 않고, List.of()는 불변하고 thread safety합니다. 
  • Arrays.asList()는 null 요소를 허용하고 List.of()는 null 요소를 허용하지 않습니다.
  • Arrays.asList(), List.of() 모두 크기는 변경할 수 없다. 크기를 바꾸려면 Collections을 생성해서 요소의 값을 옮겨야 합니다.

 

 

출처

https://jaehoney.tistory.com/144

 

Java - Arrays.asList vs List.of 차이 (완벽 정리)!

Arrays.asList() / List.of 자바에서 Array를 List으로 변환하기 위해서는 Arrays.asList(array)를 사용합니다. Java 9 버전 부터는 List.of(array)라는 새로운 팩토리 메소드를 도입했습니다. 차이점은 무엇일까요 ?

jaehoney.tistory.com

 

댓글