본문 바로가기

분류 전체보기27

[Design Pattern] 어댑터 패턴(Adapter Pattern) 어댑터 패턴(Adapter Pattern)이란? 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 어댑터 패턴 구조 Client는 Target 인터페이스를 구현한 Adaptee가 필요하다. Adaptee는 Target 인터페이스를 구현하지 않고 있다. Adaptee는 이미 개발이 완료되어 사용중이다. Adaptee를 변경하는 것이 적절하지 않은 상황이다. 1. Client는 Target 인터페이스를 통해 Adaptee를 사용하고자 한다. interface Target { Response request(); } 2. Adaptee는 이미 개발이 완.. 2022. 6. 6.
[Python] 연결 리스트(Linked List) 구현하기 노드(Node) 연결 리스트(Linked List)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 연결 리스트를 구현하기 위해서는 노드(Node)를 먼저 구현해야 한다. 노드(Node) 구현 노드는 데이터와 다음 노드를 가리키는 포인터를 가진다. class ListNode: def __init__(self,val): self.val = val self.next = None 노드(Node) 연결 다음 노드를 가리키는 포인터(next)를 통해 다음 노드와 연결할 수 있다. head_node = ListNode(12) head_node.next = ListNode(74) head_node.next.next = ListNode(23) head_node.n.. 2022. 5. 24.
[Data Structure] 큐(Queue) 큐(Queue)란? 큐(queue)는 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조의 자료구조이다. 나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념이다. 큐(Queue)의 연산 큐는 아래와 같은 연산들이 필요하다. enqueue(): 큐의 맨 뒤(rear)에 데이터를 삽입한다. dequeue(): 큐의 맨 앞(front)에서 데이터를 삭제한다. peek(): 큐의 맨 앞(front)의 데이터를 제거하지 않고 반환한다. isEmpty(): 큐가 비었다면 1을 반환하고, 그렇지 않다면 0을 반환한다. 여기서 front는 큐의 맨 앞의 위치(인덱스)를 의미하고, rear는 큐의 맨 뒤의 위치(인덱스)를 의미한다. 큐(Queue)의 종류 Linear Queu.. 2022. 5. 23.
[Data Structure] 스택(Stack) 스택(Stack)이란? 스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸쉬(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 푸쉬한 자료부터 나오게 된다. 이를테면, a부터 b와 c를 순서대로 넣은 다음 자료를 하나씩 꺼내면 c부터 b와 a의 순서로 나오게 된다. 스택(Stack)의 연산 S를 스택, x를 데이터 요소(element)라고 하자. 그러면 스택에서는 아래와 같은 중요한 연산이 존재하는 것을 알 수 있다. .. 2022. 5. 23.
[Data Structure] 연결 리스트(Linked List) 연결 리스트(Linked List)란? 연결 리스트(Linked List)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 연결 리스트(Linked List)의 종류 단순 연결 리스트(Singly linked list) 단일 연결 리스트(Singly linked list)는 각 노드에 자료 공간과 한 개의 포인터 공간이 있고, 각 노드의 포인터는 다음 노드를 가리킨다. 이중 연결 리스트(Doubly linked list) 단순 연결 리스트(Singly Linked List)는 next로 현재 노드에서 다음 노드로 갈 수 있지만 이전 노드로는.. 2022. 5. 17.
[Java] SOLID란? SRP 단일 책임 원칙(Single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다는 원칙이다. OCP 개방-폐쇄 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다는 원칙이다. 다형성을 활용해야 한다. LSP 리스코프 치환 원칙(Liskov substitution principle) 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야하는 원칙으로 상위 타입을 상속해서 재정의 했을 때 프로그램이 깨지지 않아야 함을 의미한다. ISP 인터페이스 분리 원칙(Interface segregation principle) 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터.. 2022. 5. 16.
[Java] 객체지향이란? 객체지향이란? 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 실제 세상에 가깝게 모델링하는 컴퓨터 프로그래밍 패러다임 중 하나로, 실제 세계의 데이터를 추상화 시켜 프로그래밍에서 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용으로 구성하는 프로그래밍 방법이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. OOP의 4가지 특징 추상화 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것이다. 즉 객첵들의 공통적인 특징(속성, 기능)을 모아 하.. 2022. 5. 16.
[LeetCode] 152. Maximum Product Subarray - 파이썬(Python) 문제 링크 : https://leetcode.com/problems/maximum-product-subarray/ Maximum Product Subarray - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 유형 : 동적 계획법(Dynamic Programming) 문제 설명 정수 배열 nums가 주어질 때, 가장 큰 곱 값을 갖는 연속적인 하위 배열을 return 하는 문제이다. 이때, 하위 배열의 요소들은 연속되어야 한다. 예를 들어 num = [1,2,3.. 2022. 5. 13.
[LeetCode] 53. Maximum Subarray - 파이썬(Python) 문제 링크 : https://leetcode.com/problems/maximum-subarray/ Maximum Subarray - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 유형 : 동적 계획법(Dynamic Programming) 문제 설명 정수 배열 nums가 주어지면, 가장 큰 합을 갖는 연속적인 하위 배열(최소한 하나의 숫자를 포함)을 찾아 return 하는 문제이다. 하위 배열은 배열의 연속적인 부분이다. Example 1) Input: nums.. 2022. 5. 13.