TIL-220513

tk_jang·2022년 5월 14일
0

TIL

목록 보기
3/11

항해 알고리즘 1주차 - 1회차

일단 이게 뭔가 싶다.
내가 해결 해야 하는 문제는 총 4가지다

  • 그룹 애너그램
  • 가장 긴 펠린드롬 찾기
  • 세 수의 합
  • 배열 파티션

그룹 애너그램

def groupAnagrams(strs):
    result = {} 

    for word in strs: 

        test = "".join(sorted(word)) 

        if test not in result: 

            result[test] =list() 

            result[test].append(word) 
        else:
            result[test].append(word)
    return list(sorted(result.values(),key=len))

가장 긴 팰린드롬 찾기

def longestPalindrome(s):
    def extend(left, right):#중첩함수

        while left >= 0 and right < len(s) and s[left] == s[right]: #left 가 0보다 크거나 같고  right 가 문자열의길이보다 작고 왼쪽 문자열과 오른쪽 문자열의 값이 같을때
            left -= 1
            right += 1
            # 위의 조건이 충족할떄마다 왼쪽과 오른쪽으로 한칸씩 이동하면서 비교한다.

        return s[left + 1:right] # while 문의 최종값을 리턴해준다,

    if len(s) < 2 or s == s[::-1]:# 문자열의 길이가 2 미만이거나 슬라이싱 [::-1] 뒤집었을떄 완전 같다면 바로 리턴
        return s

    result = '' # result 문자열 초기값 설정
    for i in range(len(s) - 1):
        result = max(result, extend(i, i + 1), extend(i, i + 2), key=len)

    return result

세 수의 합

    def threeSum(self, nums: List[int]) -> List[List[int]]:
        result = list()
        nums.sort()
        if 1 > len(nums):
            return result
        for i in range(len(nums) - 2):
            for j in range(i + 1, len(nums) - 1):
                for k in range(j + 1, len(nums)):
                    if i == j or i == k or j == k:
                        continue
                    if nums[i] + nums[j] + nums[k] == 0:
                        test = list([nums[i], nums[j], nums[k]])
                        if result not in test:
                            result.append(test)

        result = list(set([tuple(item) for item in result]))
        return sorted(result)

배열 파티션

배열파티션은 아직 해결하지 못했다

느낀점

첫번째 회차에서 느낀건 접해보지 못한 문제 들이라서 어떻게 풀어야할지 상상도 안간다.
지금으로썬 풀이를 공부하고 예제들을 많이 찾아보는게 좋은것 같다.

0개의 댓글