멋사 ai 스쿨 TIL - (34) codingtest_week1

eve·2022년 11월 25일
0

likeLion

목록 보기
33/45

built-in 함수 뜯어보기

1. 페이지 교체 알고리즘

  • FIFO: 페이지가 주 기억장치에 적재된 시간을 기준으로 교체될 페이지를 선정하는 방법
  • LFU: 가장 적은 횟수를 참조하는 페이지를 교체
  • LRU: 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법

2. 데이터타입

  • 리스트로의 변환: 메모리 효율이 떨어지게 된다.
  • 순회 가능한 데이터타입: 셋, 리스트, 딕셔너리, 튜플 ...
  • iterable한 객체는 next값이 존재한다는 것을 의미한다. -> 따라서, generator는 iterable하다.

3. built-in 함수들

lambda

함수를 재사용하지 않는다면 lambda를 사용한다.

map, zip

  • map에는 함수+순회가능한 객체를 인자로 받는다 (zip 또한 매핑함수)

push, pop

  • 인자 출력함수

sort 함수

*  .sort => 데이터 분석을 할 때에는 권고사항 X
* sorted => 데이터 분석을 할 때 권장
* 정렬기준은 key에 할당한다.

예시 함수

def 함수(value):
    return [value[1] - value[0], (value[0], value[1])]

s = [1, 3, 4, 8, 13, 17, 20]
list(map(함수, zip(s, s[1:])))
sorted(list(map(함수, zip(s, s[1:]))), key=lambda x:x[0])

결론: 빌트인 함수를 하나씩 듣어보자
참조: https://docs.python.org/3/library/functions.html

변수 복사

아래의 스니펫은 변수명 재선언이 아니라 변수를 복사하여 새로 추가하는 일이므로, 공간복잡도가 O(n) 증가한다.

s = [1, 2, 3, 4, 5]
ss = s[:]

자료구조의 종류

1. Stack

  • 후입선출
  • Depth First Search (DFS, 깊이우선탐색) = stack 자료구조형 문제
    *
  • Breadth First Search (BFS, 너비우선탐색) = queue 자료구조형 문제
    * 가까운 정점을 먼저 방문, 먼 정점은 나중에 방문한다.

2. class

  • 자료구조는 아니지만 .. 예시 스니펫을 넣어두었다.
class Car:
    maxSpeed = 100
    maxPeople = 6
    def start(self):
        print('출발하였습니다.')
        return
    def stop(self):
        print('출발하였습니다.')
        return

k3 = Car()
k5 = Car()
k7 = Car()

# Car.start() -> 자동차 공장을 출발시키기
k3.start()
k3.append('경고등')

3. instance

class Stack:
    def __init__(self): # 최초에 인스턴스가 생성되었을 때
      print('인스턴스가 생성되었습니다.')

클래스, 객체, 인스턴스의 개념 차이

클래스(Class)

  • 객체를 만들어 내기 위한 설계도 혹은 틀
  • 연관되어 있는 변수와 메서드의 집합

객체(Object)

  • 소프트웨어 세계에 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체
    *‘클래스의 인스턴스(instance)’ 라고도 부른다.
  • 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
  • oop의 관점에서 클래스의 타입으로 선언되었을 때 ‘객체’라고 부른다.

인스턴스(Instance)

  • 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
  • 즉, 객체를 소프트웨어에 실체화 하면 그것을 ‘인스턴스’라고 부른다.
  • 실체화된 인스턴스는 메모리에 할당된다.
  • 인스턴스는 객체에 포함된다고 볼 수 있다.
  • oop의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 ‘인스턴스’라고 부른다.
  • 추상적인 개념(또는 명세)과 구체적인 객체 사이의 관계 에 초점을 맞출 경우에 사용한다.
  • ‘~의 인스턴스’ 의 형태로 사용된다.
  • 객체는 클래스의 인스턴스다.
  • 객체 간의 링크는 클래스 간의 연관 관계의 인스턴스다.
  • 실행 프로세스는 프로그램의 인스턴스다.

4. 연결리스트

# 형태 예시
d = None
c = [37, d]
b = [99, c]
a = [12, b]
연결리스트 = {
    'head' : {
        'value': 22,
        'next': {
            'value' : 2,
            'next' : {
                'value' : 90,
                'next' : {
                    'value' : 77,
                    'next' : None
                }
            }
        }
    }
}

위를 출력하는 스니펫 및 결과는 아래와 같다.

연결리스트['head']['next']['next']['value']
------ output ------
90

두번째 예시

연결리스트 ={
    'head': None
}
# node마다 value값 지정, next값 미지정
node1 = {'value': 90, 'next': None}
node2 = {'value': 2, 'next': None}
node3 = {'value': 37, 'next': None}
node4 = {'value': 35, 'next': None}
node5 = {'value': 21, 'next': None}

# node의 next값을 다음 node로 연속되게 할당
연결리스트['head'] = node1
node1['next'] = node2
node2['next'] = node3
node3['next'] = node4
node4['next'] = node5
  • 단점: 튜플 등과 마찬가지로 딕셔너리 자료형이므로, 사용자 편의성이 너무 극대화 되어있어서 사이즈가 너무 크고 무겁다.

--- 참조 ---

페이지 교체 알고리즘: https://dailylifeofdeveloper.tistory.com/355

코드 메모리: https://lsjsj92.tistory.com/604

다익스트라: https://m.blog.naver.com/ndb796/221234424646

클래스, 인스턴스: https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html

profile
유저가 왜 그랬을까

0개의 댓글