프로그래머스/파이썬_입문

배열의 유사도

싱싱한복초이 2024. 11. 10. 10:54

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제 설명]

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

 

제한사항

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

[나의 풀이]

def solution(s1, s2):
    answer = 0
    for i1 in s1:
        for i2 in s2:
            if i1 == i2:
                answer += 1
    return answer

 

[다른 풀이]

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

set() 과 &를 이용하여 집합으로 만들어서 교집합을 구하는 방법

def solution(s1, s2):
    s1 = set(s1)
    s2 = set(s2)
    return len(s1.intersection(s2))

위와 유사한 방법

& 대신 intersection()함수를 사용

 

def solution(s1, s2):
    dic = {i:1 for i in s1}
    answer = sum(dic.get(j,0)for j in s2)
    return answer

dic에 s1의 원소들을 key값으로 하고 value를 1로 저장해둠

나중에 s2의 원소들을 key값으로 넣어서 동일한 key가 있으면 1을, 없으면 0을 불러오게끔 함

그렇게 마지막에 sum을 하면 겹치는 원소의 개수를 셀 수 있음 

def solution(s1, s2):
    answer = 0
    for i in range(len(s1)) :
        for j in range(len(s2)) :
            if s1[i] == s2[j] :
                answer += 1
    return answer

인덱스 값을 i와 j로 두고 s1[i] == s2[j]인지를 확인하는 방법

 

 

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

n의 배수 고르기  (0) 2024.11.11
숫자 찾기 + try-except구문  (0) 2024.11.10
문자열 계산하기  (0) 2024.11.09
가장 큰 수 찾기  (0) 2024.11.08
편지 + 비트시프트연산자 <<  (0) 2024.11.07