https://school.programmers.co.kr/learn/courses/30/lessons/17677
1. 해결 방법
꽤 헤맸지만 그렇게 어렵다고 느낄만한 문제는 아니었다.
확실히 알고리즘 한달차였을 땐 레벨 2라도 카카오 문제에서 엄청 막히고 답이 안보였는데, 두달 가까이 꾸준하게 하다보니 두렵지 않고 좋은 문제네 라는 느낌이 는다.
디버깅 포함 1시간 10분 정도 걸렸다.
1. 주어진 문자열을 for문 돌린다.
2. for문을 돌면서 알파벳 문자열을 제외한 두 쌍을 새로운 배열로 만든다. 해당 알파벳은 대소문자 구분이 없어야 하므로 전부 대문자로 바꾸었다.
3. set을 이용해서 합집합, 교집합을 구하고 새로운 배열에 넣는다. -> 새로운 배열을 굳이 더 생성하는 이유는 set을 이용하면 중복이 없어지기에 앞서 대문자로 바꿔놓은 문자열을 기준으로 count 카운팅 하기 위함.
4. 카운팅하고 교집합, 합집합의 크기를 구한 다음, 주어진 계산을 한다.
2. 정답코드
def solution(str1, str2):
answer = 0
new_arr1, new_arr2 = [], []
for i in range(len(str1) - 1):
if str1[i].isalpha() and str1[i + 1].isalpha():
new_arr1.append(str(str1[i].upper()) + str(str1[i + 1].upper()))
for i in range(len(str2) - 1):
if str2[i].isalpha() and str2[i + 1].isalpha():
new_arr2.append(str(str2[i].upper()) + str(str2[i + 1].upper()))
inter_list = (set(new_arr1) & set(new_arr2))
union_list = (set(new_arr1) | set(new_arr2))
inter_len = 0
for inter in inter_list:
inter_len += min(new_arr1.count(inter), new_arr2.count(inter))
union_len = 0
for union in union_list:
union_len += max(new_arr1.count(union), new_arr2.count(union))
if inter_len == 0 and union_len == 0:
answer = 65536
else:
answer = int((inter_len / union_len) * 65536)
return answer
'Algorithm > 카카오' 카테고리의 다른 글
[2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산 (0) | 2022.11.24 |
---|---|
[2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기 (0) | 2022.11.24 |
[2019 카카오 개발자 겨울 인턴십] 튜플 (0) | 2022.11.23 |
[2020 KAKAO BLIND RECRUITMENT] 기둥과 보 설치 (1) | 2022.10.25 |
[2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠 (0) | 2022.10.21 |