오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

분류 전체보기 245

의존성

어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이의 의존선이 존재 의존성은 구현 시점과 실행 시점에 따라 다른 의미를 갖는다. 실행 시점 : 의존하는 객체가 정상적으로 동작하기 위해서는 실해 시에 의존 대상 객체가 반드시 존재 구현 시점 : 의존 대상 객체가 변경 때 의존하는 객체도 변경 의존성 : 변경에 의한 영향의 전파 가능성 의존성 전이(transitive dependency) A 객체가 B 객체에 의존하면 A객체는 B객체가 의존하는 다른 객체에 대해서 의존적이다. 의존성의 종류 직접 의존성: 한 요소가 다른 요소에 직접 의존하는 경우 간접 의존성: 한 다리 건너서 의존하는 경우 의존성 전이에 의해 영향이 전파 되는 경우 런타임 의존성: 애플리케이션이 실행되는 시점 컴파일 타임 의..

Paradigm/OOP 2021.09.28

역할, 책임, 협력, 메세지

객체지향은 객체간의 협력을 통해 시스템을 구성하는 것 객체간의 협력은 메세지를 통해 이루어지며 메세지의 맥락에서 특정한 역할을 한다. 이 역할을 책임이라고 한다. 객체는 자신을 스스로 책임진다. 자신을 스스로 책임진다 = 객체를 캡슐화 한다, 자율성을 높음 객체와 객체가 상호 작용할 수 있는 방법은 오직 메세지 수신된 메세지를 처리하기 위한 방법이 메서드

Paradigm/OOP 2021.09.28

추상화 매커니즘

추상화 매커니즘에는 프로시저 추상화와 데이터 추상화가 있다. 이 두 추상화 매커니즘은 시스템을 분해하는 방법이며 프로시저 추상화 중심으로 시스템을 분해한다면 기능분해(또는 알고리즘 분해)의 길로 가는 것이다. 데이터 추상화의 경우 데이터를 중심으로 타입을 추상화 하는 경우가 있고 데이터를 중심으로 프로시저를 추상화 하는 방법이 있다. 전자를 추상데이터 타입 후자를 객체 지향이라고 한다. 타입은 변수에 저장할 수 있는 내용물의 종류와 변수에 적용될 수 있는 연산의 가짓수를 의미한다. 리스코프는 "Programming with Abstract Data Types"에서 프로시저 추상화를 보완하기 위해 데이터 추상화 개념을 제안했다. 추상 데이터 타입을 구현하기 위해서 다음과 같은 특성을 프로그래밍 언어에서 지..

Paradigm/OOP 2021.09.28

[🐕🐾 일기 1일차] 엥? 아직도 커밋을 안한다고?

혼자서 작업을 하다보면 수능 문제를 푸는 것 처럼 작업을 하게된다. 물론 벌써 수능을 본지 10년 정도가 되었지만 당시 학원 선생님이 이런 전략을 이용하라고 했다. "한 문제가 막히면 다른 문제를 먼저 풀고 또 풀다가 막히면 넘어가고 마지막 페이지를 넘기고 나서 다시 별표친 문제를 다시 보아라." 프로그래밍을 시작한지 얼마되지 않았을 때 나는 흐르는 강물을 거스르는 연어였다. 펄떡펄떡 일단 쉽게 구현할 수 있는 부분을 먼저 구현한 다음 다시 처음으로 돌아와 어려운 구현을 하는 방식으로 작업을 했다. 이런식으로 작업을 하면 작업이 빨라진다. 깊은 생각 없이, 구현할 수 있는 부분을 먼저 구현하기 때문에 작업 진도를 빠르게 칠 수 있다. 수능에서도 이런 전략을 사용했던 이유도 짧은 시간안에 많은 문제를 풀어..

글/🐕🐾 일기 2021.09.27

[BOJ] 2842 집배원 한상덕 python

https://www.acmicpc.net/problem/2842 2842번: 집배원 한상덕 상덕이는 언덕 위에 있는 마을의 우체국에 직업을 얻었다. 마을은 N×N 행렬로 나타낼 수 있다. 행렬로 나뉘어진 각 지역은 우체국은 'P', 집은 'K', 목초지는 '.' 중 하나로 나타낼 수 있다. 또, 각 www.acmicpc.net 1. 풀이 사용한 알고리즘은 bfs + 투포인터 이다. 먼저 주어진 지역의 고도 행렬을 중복이 없은 1차원 리스트로 만들어 준 후에 오름차순 정렬해준다. 이 리스트를 heights라고 하겠다. 이후에 초기값이 0인 left, right를 지정해놓고 포인터 값을 변경해가며 heights를 이용해 bfs를 시행하면 되는데 구체적인 로직은 다음과 같다. heights[left:righ..

2018 스페인 여행(바르셀로나3)

2021.07.22 - [여행/2018 스페인] - 2018 스페인 여행(바르셀로나2) 2018 스페인 여행(바르셀로나2) 2021.07.15 - [여행/2018 스페인] - 2018 스페인여행(바르셀로나1) 2018 스페인여행(바르셀로나1) 3년전 대학원에 들어가기전에 누나는 회사를 퇴사하고 시간이 맞아 스페인에 갔다. 왜 3년전 여행간걸 지 cocook.tistory.com 전 날의 몬주익 분수의 실망감을 뒤로하고 가우디 투어를 하는 날이었다. 포브스 선정 바르셀로나에 오면 꼭 해야하는 3가지 투어 중 하나라는 가우디 투어. 그 당시에는 뭔가 지적 허세에 가득차 역사적인 인물의 작품을 본다는게 뭔가 기대가 됐다. 투어는 카사 바트요에서부터 시작 되었다. 가우디에 대한 전반적인 설명을 해줬던 거 같은데..

세그먼트 트리 python

배열의 부분합을 구할 떄 사용하는 자료구조 일반적인 for으로 구현하면 N이 리스트의 길이일떄 O(N)의 시간복잡도로 계산 가능하지만 세그먼트 트리를 사용하면 O(logN)으로 가능하다. 초기화 과정 O(logN) 출력 O(logN). 세그먼트 트리는 크게 두가지 함수가 존재한다. 하나는 주어진 정수 리스트를 바탕으로 세그먼트 트리를 만드는 init함수와 만든 세그먼트 트리를 이용해 특정 구간합을 반환하는 query함수이다. 구체적인 구현은 아래와 같다. 세그먼트 트리는 이진 트리로 루트, 왼쪽자식, 오른쪽 자식으로 구성되어있다. 한편 세그먼트 트리를 구성하는 leaf 노드를 제외한 모든 정점의 값은 해당 정점을 중심으로 왼쪽 자식과 오른쪽 자식으로 합이고 리프노드의 자리에는 주어진 정수 리스트의 값이 ..

[DB] 트랜잭션 격리 수준

트랙잭션은 ACID를 지킨다. Atomicity : 트랜잭션이 중간에 실패하면 전체 결과가 반영되지 않음 Consistency : 트랜잭션이 성공적으로 반영된다면 일관성있는 데이터베이스의 상태가 유지된다. Isolation : 하나의 트랙잭션이 수행될 때 다른 트랜잭션이 적용되지 못한다. Durability : 반영된 트랜잭션의 결과가 지속적으로 유지된다. 이 중에서 오늘 다뤄 볼 내용은 바로 트랜잭션의 특성 중 Isolation에 대한 내용이다. 우리가 일반적으로 격리성이 지켜진다고 하면 하나의 트랙잭션이 진행될 때 절대로 다른 트랜잭션의 작업이 진행되지 못하는 것처럼 알고 있을 수도 있다. 하지만 이런식으로 동작하게 되면 하나의 필드에는 하나의 작업만이 진행할 수 있고 결과적으로는 성능저하가 발생하게..

Technology/DB 2021.07.28

최소 공통 조상(LCA, Least Common Ancestor)

나이브한 방식의 최소 공통 조상 찾기 def solution(N, tree, v1, v2): level = [0 for i in range(N+1)] parent = [0 for i in range(N+1)] visited = [0 for i in range(N+1)] def dfs(here, depth): visited[here] = True level[here] = depth for there in tree[here]: if not visited[there]: parent[there] = here dfs(there, depth+1) root = 1 #root 1로 가정 dfs(root, 1) def LCA(v1, v2): """ v1, v2의 공통조상을 찾아주는 알고리즘 """ #같은 레벨로 만들어 ..

[BOJ] 백준 16933 벽 부수고 이동하기 3 python

무작정 큐에 집어넣는게 능사가 아니고 어떤 조건에서 넣어야하는지 항상 판단할 것. 이렇게 풀면 언어의 한계로 통과되지 않음. 아래 다른 분이 푸신 것을 참고해서 풀 것 https://rebas.kr/799 BOJ 16933 · 벽 부수고 이동하기 3 알고리즘 분류 : BFS 벽 부수고 이동하기 시리즈 세 번째 문제이다. 이번에는 이동할 때 낮과 밤이 매번 바뀌고, 낮에만 벽을 부술 수 있다. BOJ 14442번 '벽 부수고 이동하기 2' 문제에서 낮과 밤 설 rebas.kr import sys from collections import deque def solution(): """ 이 풀이가 틀린 풀이는 아니지만 언어의 한계로 시간초과가 난다.""" input = sys.stdin.readline N, ..