https://school.programmers.co.kr/learn/courses/30/lessons/17677
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1차 풀이
일단 함수를 통해 입력 문자열을 2개씩 나누어서 리스트에 저장했다
그 후 set 함수를 통해 교집합, 합집합을 구할려 했다
거의 다 풀었는데 이렇게 풀면 안된다는 것을 깨달았다.....
이 문제에서는 set 함수를 통해 중복을 제거하면 안된다
왜냐믄 A = ['aa', 'aa'] 와 B = ['aa', 'aa', 'aa'] 가 있을 경우에는
set 함수를 사용하면
교집합은 ['aa']
합집합도 ['aa']
로 되버린다 (사실 이렇게 되는게 맞는건지 알았는데)
문제에서는 이럴 경우
교집합은 ['aa', 'aa']
합집합도 ['aa', 'aa', 'aa']
로 만들어여한다...
다른 방법을 생각해야 한다ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ
def two(input_list):
output_list = []
for i in range(len(input_list)):
if i < len(input_list)-1:
word = input_list[i] + input_list[i+1]
if word.isalpha():
output_list.append(word)
return output_list
# 교집합 / 합집합
# 공집합 = 1
# 곱하기 65536 후에 정수부분만 추출
def solution(str1, str2):
answer = 0
str1 = str1.lower()
str2 = str2.lower()
list1 = two(str1)
list2 = two(str2)
# print(list1)
# print(list2)
# 합집합
union = list(set(list1) | set(list2))
# 교집합
intersection = list(set(list1) & set(list2))
# print(union)
# print(intersection)
if len(union) == 0:
answer = 65536
else:
answer = len(intersection) / len(union) * 65536
return answer
그러다가 이런 걸 발견했다
[개념정리] 파이썬 다중 집합의 교집합, 합집합
코테 연습할때마다 잊을만 하면 나오는 다중집합이다. 굳이 몰라도 되지만, 모른채 쓰려면 머지소트를 구현해야 하는 굉장한 번거로움이 있기때문에 알아두는게 좋을 것 같아서 포스팅 한다. 1.
velog.io
set 함수를 사용하지 않고
list를 이용해서 다중 집합의 교집합, 합집합을 구하자!!!!
2차 풀이
결국에는 다중 집합의 교집합, 합집합 부분을 코드로 구현하면서
통과 할 수 있었다.
def two(input_list):
output_list = []
for i in range(len(input_list)):
if i < len(input_list)-1:
word = input_list[i] + input_list[i+1]
if word.isalpha():
output_list.append(word)
return output_list
# 교집합 / 합집합
# 공집합 = 1
# 곱하기 65536 후에 정수부분만 추출
def solution(str1, str2):
answer = 0
str1 = str1.lower()
str2 = str2.lower()
list1 = two(str1)
list2 = two(str2)
print(list1)
print(list2)
list2_temp = list2.copy() # 합집합을 구하기 위한 차집합
union = list2.copy() # 합집합
intersection = [] # 교집합
for i in list1:
if i in list2:
list2.remove(i)
intersection.append(i)
if i not in list2_temp:
union.append(i)
else:
list2_temp.remove(i)
# print(union)
# print(intersection)
if len(union) == 0:
answer = 65536
else:
answer = len(intersection) / len(union) * 65536
return int(answer)
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 2] 전화번호 목록 (Hash 해시 : 파이썬 dictionary 활용하기) (0) | 2023.03.06 |
---|---|
[Python] [Level 2] 프린터 (Priority Queue 우선순위 큐) (0) | 2023.03.03 |
[Python] [Level 2] 해시 위장 (Hash, Dictionary) ...Hash Table 처럼 풀기! (0) | 2023.03.01 |
[Python] [Level 2] 기능 개발 (0) | 2022.11.05 |
[Python] [Level 2] n^2 배열 자르기 (0) | 2022.11.04 |