Test/Python(20220101~)

프로그래머스.L0.배열의유사도

kiostory 2022. 10. 12. 21:40

문제 설명

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


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

 

입출력 예
s1  :  s2  :  result
["a", "b", "c"] ["com", "b", "d", "p", "c"] 2
["n", "omg"] ["m", "dot"] 0

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

 

* 첫 번째 생각 : 단순.. 원소 하나씩 비교

def solution(s1, s2):
    answer = 0
    for i in s1:
        if i in s2:
            answer += 1
    return answer
테스트 1 통과 (0.00ms, 9.97MB)
테스트 2 통과 (0.00ms, 10.3MB)
테스트 3 통과 (0.00ms, 10.3MB)
테스트 4 통과 (0.00ms, 10.3MB)
테스트 5 통과 (0.00ms, 9.97MB)
테스트 6 통과 (0.00ms, 10.1MB)
테스트 7 통과 (0.00ms, 10.2MB)
테스트 8 통과 (0.00ms, 10.2MB)

* 두 번째 생각

set() 자료형으로 바꾸면 합집합(|), 교집합(&), 차집합(-)을 쉽게 구할 수 있단다

def solution(s1, s2):
    return len(set(s1) & set(s2))

문자열 배열을 set() 자료형으로 형변환하고 교집합 & 연산으로 찾아 개수 len 을 return

정확성 테스트
테스트 1 통과 (0.01ms, 10.2MB)
테스트 2 통과 (0.01ms, 10MB)
테스트 3 통과 (0.01ms, 10.1MB)
테스트 4 통과 (0.01ms, 10.2MB)
테스트 5 통과 (0.01ms, 10MB)
테스트 6 통과 (0.01ms, 10.2MB)
테스트 7 통과 (0.01ms, 10.1MB)
테스트 8 통과 (0.01ms, 10.2MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

주목할 만한 것은, 짧은 코드가 소요시간 면에서 효율적이지만은 않다는 것

 

cf.

https://wikidocs.net/1015

 

02-6 집합 자료형

[TOC] ## 집합 자료형은 어떻게 만들까? 집합(set)은 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다. ...

wikidocs.net