1. JAVA
- 오늘은 모든 시간을 spring 과제에 쏟았다
- 대중교통이라는 부모 클래스를 생성하고, 이를 상속받는 버스와 택시 클래스는 만드는 과제였는데, 필드를 오버라이딩 하는 것과 관련해서 뭔가 잘 풀리지 않는 느낌이었다
- 과제의 요구사항은 충분히 맞출 수 있을 것 같은데, 바람직하게 코드를 구성해서 완성해가고 있는 것인지에 대한 의문이 든다
- 나의 판단으로는 객체 생성할 때 사용자가 필드에 해당하는 값들을 지정해서 넣는 형태가 아니고 상당 수의 필드값의 디폴트 값이 자식 클래스끼리 차이가 있다보니, 일단 자식 클래스에서 그냥 새롭게 필드를 정의해서 덮어쓰는 식으로 진행했다
- 그 과정에서 배운 것:
- 자식 클래스에서 덮어쓴 필드의 getter setter 메소드는 오버라이딩 해야 원하는 결과가 나온다
- 부모 클래스에서 메소드를 만들 때 getter 메소드로 값을 불러와서 사용해야 자식 클래스가 해당 메소드를 사용할 때 원하는 결과가 나온다
- 이렇게 뭔가 삐걱대면서 짜는게 맞는지 나중에 꼭 질문해야겠다
2. DFS 복습
332번
class Solution:
def findItinerary(self, tickets: List[List[str]]) -> List[str]:
ans = []
table = collections.defaultdict(list)
# 어휘순 반영한 그래프 생성
for a, b in sorted(tickets, reverse=True):
table[a].append(b)
def dfs(place): # 출발지
while table[place]: # while로 목적지 리스트를 어휘 순으로 탐색 -> dfs
dfs(table[place].pop()) # 목적지
ans.append(place)
dfs("JFK")
return ans[::-1]
- tickets를 반대로 정렬하여 나중에 pop할 때 효율적이게끔 작성
- dfs안의 dfs 이후의 식은 각 가지의 리프노드부터 거꾸로 올라오면서 수행
class Solution:
def findItinerary(self, tickets: List[List[str]]) -> List[str]:
table = collections.defaultdict(list)
for a, b in sorted(tickets, reverse=True):
table[a].append(b)
# 스택의 끝 값(출발지)을 받아와서 목적지를 다시 스택의 끝에 append하는 것을 반복
ans, stack = [], ["JFK"]
while stack:
while table[stack[-1]]: # dfs 역할
stack.append(table[stack[-1]].pop()) # 목적지 다음으로 넘겨주기
ans.append(stack.pop())
return ans[::-1]
- 반복을 사용한 풀이
- stack 리스트 하나만 가지고는 경로가 한 번 끊기게 되면 다시 돌아와서 탐색을 이어갈 수 없으므로 저장용 리스트 한개 더 생성
'이노베이션 캠프' 카테고리의 다른 글
[TIL] 11일차 (0) | 2022.08.12 |
---|---|
[TIL] 10일차 (0) | 2022.08.11 |
[TIL] 8일차 (0) | 2022.08.08 |
[WIL] 1주차 (0) | 2022.08.07 |
[TIL] 6일차 (0) | 2022.08.06 |