전체 446

[Java의 정석][Chapter-2] 변수

이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다. 1. 변수 변수 단 하나의 값을 저장하는 메모리 공간 변수 타입 변수에 저장될 값의 타입 변수 이름 변수의 구별을 위해 붙인 이름 변수의 초기화 변수 사용 전 처음 값을 저장하는 것 초기화하지 않으면 쓰레기값 대입 연산자 '=' 이용 여러 변수를 콤마 ','로 한줄에 선언 가능 thousand = hundred * 10 -> hundred 값을 "읽어" 10을 곱한 값을 thousand에 저장 두 변수의 값 교환 tmp 저장소 이용 변수의 명명 규칙 예약어(keyword)로 사용 불가능 특수문자는 '_'와 '$'만 사용 가능 카멜 케이스 - 클래스는 첫 문자가 대문자 - 메소드나 변수는 첫 문자가 소문자 2. 변수의 타입 ..

책읽기 2021.08.01

[Java의 정석][Chapter-1] 자바를 시작하기 전에

이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다. ※ 요약 자바 특징 운영체제에 독립적 객체지향 언어 자동 메모리 관리 동적 로딩 JVM 자바 프로그램은 운영체제 / 하드웨어 대신 JVM과 통신 자바 프로그램을 운영체제에 독립적으로 실행할 수 있도록 해줌 자바 인터프리터를 거치므로 속도가 느림 소스코드 이름의 특징 소스코드의 이름은 public class와 동일 소스코드에는 둘 이상 public class가 존재할 수 없음 public class가 없을 경우, class 중 하나의 이름과 일치 1. 자바(Java Programming Language) 1) 자바란? 썬 마이크로시스템즈에서 개발, 1996년 발표한 객체지향 프로그래밍 언어 운영체제에 독립적으로 운영체제에 따..

책읽기 2021.08.01

[파이썬 알고리즘 인터뷰][최단경로] K 경유지 내 가장 저렴한 항공권

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 K개 경유지 내에 도착하는 최소 가격 리턴 책에서 구현된 코드 # Fail def findCheapestPrice(self, n: int, flights: list[list[int]], src: int, dst: int, k: int) -> int: graph = collections.defaultdict(list) for u, v, w in flights: graph[u].append((v,w)) Q = [(0, src, k)] while Q: price, node, k = heapq.heappop(Q) if node == dst: return price if k >= 0: for v, w in graph..

책읽기 2021.07.30

[파이썬 알고리즘 인터뷰][최단경로] 네트워크 딜레이 타임

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 출발지에서 각 노드까지 weight중 최대값 구하기, 못가는 노드가 있을 경우 -1 책에서 구현된 코드 def networkDelayTime(self, times: list[list[int]], n: int, k: int) -> int: graph = collections.defaultdict(list) for u, v, w in times: graph[u].append((v,w)) Q = [(0, k)] dist = collections.defaultdict(int) while Q: time, node = heapq.heappop(Q) if node not in dist: dist[node] = time ..

책읽기 2021.07.30

[파이썬 알고리즘 인터뷰] 13장 - 최단 경로 문제

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 최단 경로 문제 각 간선의 가중치 합이 최소가 되는 두 정점 사이의 경로를 찾는 문제 그래프의 종류와 특성에 따라 각각 최적화된 다양한 최단 경로 알고리즘이 존재 가장 유명한 것이 다익스트라 알고리즘 다익스트라 알고리즘 항상 노드 주변의 최단 경로만 택하는 대표적인 그리디 알고리즘 단순하고 실행 속도가 빠름 노드 주변을 탐색할 때 BFS를 이용 다익스트라 알고리즘 특징 임의의 정점을 출발 집합에 더할 때, 그 정점까지의 최단 거리 계산이 끝났다고 가정 - 즉, 탐색을 위한 출발노드가 갖는 최단거리는 최단거리임이 보장되어야함 따라서, 음수를 처리할 수 없음 - 벨만-포드 알고리즘과 같이 음수 사용이 가능한 알고리즘 사용..

책읽기 2021.07.30

[파이썬 알고리즘 인터뷰][그래프] 코스 스케줄

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 우선순위가 있는 task들에 대해 모든 코스가 완료 가능한지 판별 책에서 구현된 코드 # 재귀 - Fail def canFinish(self, numCourses: int, prerequisites: list[list[int]]) -> bool: graph = collections.defaultdict(list) for x, y in prerequisites: graph[x].append(y) traced = set() def dfs(i): if i in traced: return False traced.add(i) for y in graph[i]: if not dfs(y): return False trac..

책읽기 2021.07.30

[파이썬 알고리즘 인터뷰][그래프] 일정 재구성

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 JFK에서 출발하는 여행 일정 구성 책에서 구현된 코드 from collections import defaultdict def findItinerary(self, tickets: list[list[str]]) -> list[str]: graph = collections.defaultdict(list) for a, b in sorted(tickets, reverse=True): graph[a].append(b) route = [] def dfs(a): while graph[a]: dfs(graph[a].pop()) route.append(a) dfs('JFK') return route[::-1] 기억해야할 기..

책읽기 2021.07.30

[파이썬 알고리즘 인터뷰][그래프] 부분 집합

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 모든 부분 집합 리턴 책에서 구현된 코드 def subsets(self, nums: list[int]) -> list[list[int]]: result = [] def dfs(index, path): result.append(path) for i in range(index,len(nums)): dfs(i+1, path + [nums[i]]) dfs(0, []) return result 기억해야할 기법 조건 확인해서 필요없는 코드 제거하기 내가 구현한 코드 def subsets(nums: list[int]) -> list[list[int]]: result = [] def dfs(elts: list, s: in..

책읽기 2021.07.29

[파이썬 알고리즘 인터뷰][그래프] 조합의 합

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 숫자 집합을 중복 포함 조합하여 합이 target이 되는 원소들 나열 책에서 구현된 코드 def combinationSum(self, candidates: list[int], target: int) -> list[list[int]]: result = [] def dfs(csum, index, path): if csum < 0: return if csum == 0: result.append(path) return for i in range(index, len(candidates)): dfs(csum - candidates[i], i , path + [candidates[i]]) dfs(target, 0, []..

책읽기 2021.07.29

[파이썬 알고리즘 인터뷰][그래프] 조합

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 조합 구현 책에서 구현된 코드 # 재귀 def combine(self, n: int, k: int) -> list[list[int]]: results = [] def dfs(elements, start: int, k: int): if k == 0: results.append(elements[:]) return for i in range(start, n+1): elements.append(i) dfs(elements, i + 1, k - 1) elements.pop() dfs([], 1, k) return results # itertools def combine(self, n: int, k: int) -> l..

책읽기 2021.07.29