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 값이 점점 증가해서 자동 종료됨