포스트

배열의 유사도

https://school.programmers.co.kr/learn/courses/30/lessons/120903

문제

  • 두 배열을 순회하면서 각 배열에서 공통으로 나타나는 원소의 수를 찾는 문제이다. 여기서는 중복된 원소가 없다는 것이 보장되므로, 간단한 방법으로 원소를 확인하고 개수를 세어볼 수 있다.


  • 문제 풀이
    • 두 배열을 순회하며 서로 겹치는 원소를 찾고 개수를 세는 방식으로 구현할 수 있다. 이를 위해 HashSet을 사용하여 중복을 피하고, 겹치는 원소를 확인한다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
      import java.util.HashSet;
        
      class Solution {
          public int solution(String[] s1, String[] s2) {
              HashSet<String> set1 = new HashSet<>();
              HashSet<String> set2 = new HashSet<>();
        
              // s1 배열의 원소들을 set1에 추가
              for (String s : s1) {
                  set1.add(s);
              }
        
              // s2 배열의 원소들을 set2에 추가
              for (String s : s2) {
                  set2.add(s);
              }
        
              // set1과 set2에 공통으로 포함된 원소 수 계산
              int count = 0;
              for (String s : set1) {
                  if (set2.contains(s)) {
                      count++;
                  }
              }
        
              return count;
          }
      }
    


    • s1의 각 원소가 s2에 있는지를 확인하고, 일치하는 원소의 개수를 count에 누적한다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
      class Solution {
          public int solution(String[] s1, String[] s2) {
              int count = 0;
        
              for (String s : s1) {
                  for (String str : s2) {
                      if (s.equals(str)) {
                          count++;
                          break;
                      }
                  }
              }
        
              return count;
          }
      }
    


  • s1s2는 각각 문자열 배열이기 때문에 contains 메서드를 직접 사용할 수 없다. 배열은 해당 메서드를 지원하지 않는다. 배열 내에 특정 값을 확인하려면 반복문을 사용하여 각 원소를 일일히 비교해야 한다. 코드를 수정해서 HashSet 등을 활용하여 배열 내에 공통된 값이 있는지 확인해야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    // 오답
    class Solution {
        public int solution(String[] s1, String[] s2) {
            int count = 0;
          
            if (s1.contains(s2)) {
                count ++;
            }
           
            return count;
        }
    }
    

    에러 메시지

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.