이노베이션 캠프

[TIL] 8일차

hjkim0502 2022. 8. 8. 22:59

1. JAVA

  • 정렬 관련 compareTo 사용 (내 기준을 만들어서 정렬하는 방법)
  • String.charAt(index)
  • 정규표현식
  • String + int -> String (int가 문자열로 변환)
    • 예) "a" + 1 -> "a1"
  • char + int -> int (char이 해당하는 아스키코드의 숫자형으로 변환)
    • 예) 'a' + 1 -> 98
  • 배열과 문자열 조작 관련해서 조금씩 익숙해져가고 있긴한데, 이게 과연 스프링을 사용하는데 유용할지 의문이다
  • 멘토님이 이번주 과제를 다하면, 더 크게 확장하여 객체지향적으로 개발해보면 언어에 대한 이해가 매우 좋아질 것이라고 조언 주셨다
  • 또한 이후 주특기 주차, 프로젝트 주차가 진행되어도 꾸준하게 알고리즘을 놓지 않고 하루 한 문제 씩이라도 풀어보라고 해주셨다

 

2. DFS 복습

 

39번

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        ans = []
        
        def dfs(nums, start, csum):
            if csum == 0:
                ans.append(nums[:])
                return
            elif csum < 0:
                return
            
            for i in range(start, len(candidates)):
                dfs(nums + [candidates[i]], i, csum - candidates[i]) // 조합에서는 i + 1
                
        dfs([], 0, target) // target 값에서 빼면서 종료조건에 맞는지 확인
        return ans
  • 매번 sum(nums)와 target 값 비교보다 csum값에서 빼면서 0과 비교하는 것이 훨씬 효율적
  • 더 많이 풀어보면서 재귀에 익숙해져야 할 것 같다

78번

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        ans = []
        
        def dfs(n, index):
            ans.append(n) // 넘어온 리스트 항상 저장
            
            for i in range(index, len(nums)):
                dfs(n + [nums[i]], i + 1) // 중복과 동일한 메커니즘
            
        dfs([], 0)
        return ans
  • cnt 변수로 종료조건 작성했었는데, index 값이 점점 증가해서 자동 종료됨