전체 글 802

행동이 상태를 결정한다.

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다.설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다. 제목 : 객체지향의 사실과 오해 저자 : 조영호 범위 : 02 이상한 나라의 객체 요약 정리 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다. 숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓과 같은 단순한 값들은 객체가 아니다. 단순한 값들은 다른 객체의 상태를 표현하기 위해 사용한다. 객체의 상태를 구성하는 모든 특징을 객체의 프로퍼티라고 한다. 정적인 프로퍼티 사람이라면 키, 성별, 체력 등이 될 수 있고 변경되지 않고 고정되기 때문에 ‘정적’이다. (cf. key) 동적인 프로퍼티 값(va..

Class-based Views

Class-based Views 클래스 기반 뷰 Django's class-based views are a welcome departure from the old-style views. 장고의 클래스 기반 뷰가 기존 뷰 스타일로 부터 분리된 것은 반가운 일이다. REST framework provides an APIView class, which subclasses Django's View class. 레스트 프레임워크는 장고의 뷰 클래스를 하위 클래스로 분류하는 APIView 클래스를 제공한다. APIView classes are different from regular View classes in the following ways: APIView 클래스들은 일반적인 뷰 클래스들과 다음과 같은 차이점이..

파이썬 range로 음수와 0도 반복할 수 있을까?

range는 지정한 수의 범위만큼 반복을 돌릴 때 유용하게 쓰는 파이썬 내장함수이다. 주 사용법은 다음과 같다. >>> for i in range(5): print(i) 0 1 2 3 4 양수 5를 지정하였으므로 0부터 4까지 5번을 반복한다. 그렇다면 0과 음수를 지정하면 어떻게 될까? >>> for i in range(-3): print(i) >>> >>> for i in range(0): print(i) 안타깝지만 반복이 되지 않아 결과도 나오지 않는다. 그러면 음수와 0은 반복을 할 수 없는 것인가? 아니다. 이 둘도 반복할 수 있다. 다만 이 둘의 경우 범위를 명확히 지정해주어야 한다. >>> for i in range(-1,5): print(i) -1 0 1 2 3 4 위에 코드처럼 음수와 0..

'메모리 관리 방법'을 발표하고 '스택'과 '큐'를 코드로 구현해봄

오늘 한 것 어제 공부한 메모리 관리 방법을 스터디에서 발표 2022.02.09 - [Dev/CS] - 메모리 단편화를 해결하는 세 가지 방법 자료구조 스택과 큐에 대해서 직접 파이썬 코드로 구현하고 포스팅 2022.02.09 - [Dev/Algorithm & Structure] - [자료구조] 스택과 큐 Python 코드로 구현해보았다. 성장한 점 '메모리 단편화'라는 개념을 알게 되었고 이를 해소하기 위해 '페이징', '세그멘테이션', '메모리 풀'과 같은 방법을 사용한다는 걸 알게 되었다. 스택과 큐, 후입 선출과 선입선출에 대해서 파이썬 코드로 구현할 수 있게 되었다. 노력할 점 CS는 매일 조금씩 꾸준히 학습하여 정리하고 싶다. 알고리즘 문제를 단순히 푸는 게 아니라 '자료구조'를 함께 학습하며..

Log/Today 2022.02.09

[자료구조] 스택과 큐 Python 코드로 구현해보았다.

스택과 큐 'Stack'은 나중에 들어온 것을 먼저 내보내는 후입선출을 뜻한다. 'Queue'는 먼저 들어온 것을 먼저 내보내는 선입선출을 뜻한다. 이를 파이썬 코드로 구현하자면 다음과 같다. 스택 top - 스택의 가장 윗부분 (꼭대기) bottom - 스택의 가장 아랫부분 (바닥) push(item) - 데이터를 넣는 작업 pop() - 데이터를 꺼내는 작업 peek() - 스택의 가장 위에 있는 항목 조회 stack_list = [] for i in range(5): stack_list.append(i) print(f"stack_push :: {stack_list}") for _ in range(5): stack_list.pop() print(f"stack_pop :: {stack_list}") 0..

두 개 뽑아서 더하기

문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 사항 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 #1 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.) 3 = 2 + 1 입니다. 4 = 1 + 3 입니다. 5 = 1 + 4 = 2 + 3 입니다. 6 = 2 + 4 입니다. 7 = 3 + 4 입니다. 따라서 [2,3,4,5,6,7] 을 return 해야 합니다. 해결 방법 1. numbers를 반복하여 요소를 뽑아낸다. 2. 다음 ..

메모리 단편화를 해결하는 세 가지 방법

배경 키워드 프로세스는 독립된 메모리 공간을 갖는다. 독립된 메모리이기 때문에 다른 프로세스의 메모리 공간에 일반적으로 접근할 수 없다. 운영체제는 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다. Swapping은 메모리의 관리를 위해 사용되는 기법이다. 예를 들어 CPU 할당 시간이 끝난 프로세스의 메모리를 HDD 같은 보조 기억장치로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있다. Swap-in은 주 기억장치(RAM)로 불러오는 과정 Swap-out은 보조 기억장치로 내보내는 과정 메모리 관리 문제 단편화(Fragmentation)는 메모리 적재 및 제거가 반복되면서 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 작은 자유 공간들을 의미한다. 단편화는 '..

최소직사각형

문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다. 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명..

2022년 6주차 '하기 쉽게, 하고 싶게'

Weekly growth 이번 주 내가 중점으로 둔 것은 '하기 쉽게, 하고 싶게'였다. 이를 실현하기 위해 이번 주 새롭게 실천한 방법은 '하루를 체크리스트로 모두 채우기'였다. 보통 다음날 '하고 싶은 것들'을 시간 순서대로 체크박스로 만든다. 그리고 당일이 되면 위에서부터 하나씩 체크하며 처리한다. 하나의 체크박스는 실행하는데 부담이 되지 않도록 아주 잘게 쪼갠 '단일 액션'이다. 블러 처리 하긴 했지만 저 이미지에는 '카페 가기', '점심 먹기', '쉬기' 등 일상의 당연한 것들도 포함되어 있다. (벌써 하고 싶지 않은가?) 데일리 체크리스트를 한 주 동안 실천해보니 매우 긍정적인 효과가 있었다. 우선 아침에 체크박스로 해야 할 일을 배치하니 기분 좋게 그 일을 할 수 있게 되었다. 나 같은 경우..