문제
https://school.programmers.co.kr/learn/courses/30/lessons/17677
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
str1, str2가 주어졌을 때 문자를 2개씩 slice하여 교집합 / 합집합 을 리턴하여라.
일단 문제에서 대소문자를 구분하지 않는다고 하였으니 이 점을 생각하면서 봐야한다.
두 번째로 2개씩 잘랐을 시 알파벳을 제외한 다른 문자가 있을 시 건너뛰어야 하는 점도 생각해야 한다.
다음과 같이 풀이를 진행하였다.
1. 2개씩 잘라서 소문자로 만들고 리스트를 추가한다. (str1, str2)
2. 두 개의 리스트를 정렬한다.
3. 이중for문을 사용하여 하나의 문자열이 다른 집합의 문자열과 매칭이 되는지 확인한다.
4. 3번에서 교집합과 합집합을 구했으니, answer를 구한다.
4번에서 유의해야 되는 것은 합집합의 갯수를 세줄 때 교집합의 갯수를 나중에 더해주는 것이었다.
정답코드
더보기
'''
'25. 09. 26.(금)
1. J(A, B)를 알아내어라.
2. 2글자씩 끊어서 다중집합을 만드시오.
3. 대소문자는 같은 것이다..?
'''
def solution(str1, str2):
answer = 0
str1_list = []
str2_list = []
for i in range(len(str1) - 1):
if str1[i : i + 2].isalpha():
str1_list.append(str1[i : i + 2].lower())
for i in range(len(str2) - 1):
if str2[i : i + 2].isalpha():
str2_list.append(str2[i : i + 2].lower())
str1_list.sort()
str2_list.sort()
B_check = [0] * len(str2_list)
up = down = 0
for i in range(len(str1_list)):
for j in range(len(str2_list)):
if B_check[j]:continue
if str1_list[i] == str2_list[j]:
B_check[j] = 1
up += 1#교집합
break
else:
down += 1
#교집합 갯수 추가하기
down += B_check.count(0) + up
# print(up)
# print(down)
if down == 0:answer = 65536
else:
answer = int(up / down * 65536)
# if len(str1_set | str2_set) == 0:answer = 65536
# else:
# answer = int(len(str1_set & str2_set) / len(str1_set | str2_set) * 65536)
return answer
깃허브 : https://buly.kr/2UjfZAR
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 스택 / 뒤에 있는 큰 수 (0) | 2025.10.05 |
|---|---|
| 프로그래머스 / 완전탐색 / 모음사전 (0) | 2025.10.01 |
| 프로그래머스 / 백트래킹 / 타겟 넘버 (0) | 2025.09.24 |
| 프로그래머스 / bfs / 게임 맵 최단거리 (0) | 2025.09.23 |
| 프로그래머스 / 해시 / 롤케이크 자르기 (0) | 2025.09.21 |