본문 바로가기

Python24

[ 모각코 코딩테스트 Level 1 3일차 ] 탐색 선형 탐색 알고리즘 선형 탐색 알고리즘 : 데이터의 처음부터 끝까지 하나하나 확인하는 방식 배열의 첫 요소부터 하나하나씩 검사하기 때문에 원하는 값이 맨 마지막에 존재한다면 배열의 크기와 동일한 연산 횟수가 필요함. 즉 시간복잡도는 O(n) my_arr = [ 1,2,3,4,5,6,7,8,9,10 ] for index in my_arr : if index == 6 : print("성공") 이진 탐색 알고리즘 이진 탐색 알고리즘 : 배열을 반으로 나누어서 원하는 값을 찾는 알고리즘 * 탐색을 하기전에 배열의 데이터가 크기 순서대로 정렬이 되어있어야 한다. ⓐ 배열의 중간값을 찾고 찾고자하는 값보다 중간값이 작은지 큰지 확인한다. ⓑ 중간값이 작다면 배열의 중간값을 기준으로 .. 2022. 3. 10.
[ 모각코 코딩테스트 Level 1 2일차 ] 복잡도 배열의 합을 구할 때는 배열의 합을 두번 구해 2개의 결과를 도출하는 것보다 배열의 결과 합을 재사용해서 값을 구하는 것이 더 효율적이다. 알고리즘의 연산 시간은 기본 연산의 실행 횟수로 평가되기 때문이다. 알고리즘에서는 실제로 실행되는 연산의 횟수를 계산하는 것이 아니라 복잡도라는 개념을 이용한다. [ 복잡도 ] 복잡도에는 연산의 횟수를 의미하는 시간 복잡도와 자원 공간의 양을 의미하는 공간 복잡도가 존재한다. 시간복잡도 시간 복잡도 : Big-O 표기법을 이용해서 최악의 경우를 대비한다. ( 최소한의 성능 보장 ) O(1), 상수시간 : 입력한 데이터의 크기와 관계없이 일정한 시간이 소요되는 알고리즘 ( 첫 요소만 출력 ) ex) 배열에 직접 접근 ( 스택, 큐 ) * Big-O 표기법은 상수항을 무.. 2022. 3. 8.
[ 객체 지향 프로그래밍 ] 5일차 ( 상속 ) * 캡슐화 : __를 2개 붙이면 그 변수의 이름은 네임 맹글링이 된다. 네임 맹글링이 된 후 새 이름을 사용하면 외부로부터 그 변수에 접근할 수 있기때문에 접근을 완벽하게 막을 수 있는 것은 아니다. → getter / setter 메소드를 직접 정의하는 것이 아니라 @property 데코레이터를 사용하는 것이 좋다. @property 메소드를 사용하면 마치 변수에 직접 접근하는 것 같은 방식으로 변수의 값을 읽을 수 있다. ( 실제로는 getter / setter 메소드가 실행되는 것임 ) [ 상속 ] 상속이란 두 클래스 사이에 부모 - 자식 관계를 설정하는 것이다. ex) A는 B이다. A는 자식 클래스이고 B는 부모 클래스이다. 자식 클래스는 부모 클래스의 모든 변수와 메소드를 물려받는다. 상속은.. 2022. 2. 10.
[ 객체 지향 프로그래밍 ] 4일차 ( 추상화, 캡슐화 ) [ 추상화 ] 추상화는 어떤 것을 사용할 때 몰라도 되는 정보는 감추고 꼭 알아야 하는 부분만 드러내는 것을 의미한다. 즉, 프로그래머들이 특정 코드를 사용할 때 필수적인 정보를 제외한 세부 사항을 가리는 것이다. 변수나 함수를 사용하는 것도 추상화이다. 한번 변수를 선언한다면 그 변수의 값을 몰라도 이름만 안다면 호출해서 사용이 가능하기 때문이다. 함수 또한 이름, 파라미터, 기능 등만 알아도 바로 함수를 사용 가능하기 때문이다. 클래스를 사용하는 것도 추상화이다. 클래스 안에 있는 코드를 보지 않더라도 클래스의 필요한 정보만 알아도 사용이 가능하다. 예를 들면 list는 파이썬 개발자들이 미리 만들어놓은 클래스들 중 하나이다. 우리는 list 클래스의 append 함수의 자세한 코드를 모르지만 바로 .. 2022. 1. 29.
[ AI 코칭스터디 ] 2주차 학습 ( Module and Project ) [ Module and Project ] 파이썬은 대부분의 라이브러리가 이미 다른 사용자에 의해서 구현되어 있다. 다른 사용자가 만든 프로그램을 쓰는 방법으로는 객체보단 모듈을 사용한다. 모듈은 하나의 패키지 안에 들어있는 어떤 대상의 부분이다. 예를 들면 레고 블록이나 자동차 부품들을 합쳐서 하나의 큰 프로그램을 만들 수 있다. 즉 모듈은 프로그램에서는 작은 프로그램의 조각으로 모듈들을 모아서 하나의 큰 프로그램을 개발할 수 있다. 프로그램을 모듈화 시키면 다른 프로그램을 사용하기 쉬워 진다. 패키지는 모듈을 모아놓은 단위로 하나의 프로그램이다. 여러 모듈들을 하나의 폴더 단위로 묶은 다음에 오픈 소스로 공개할 수 있다. 모듈 ( Module ) 파이썬의 모듈은 py 파일을 의미한다. 같은 폴더에 모듈.. 2022. 1. 25.
[ AI 코칭스터디 ] 2주차 학습 ( Python Object Oriented Programming ) [ Python Object Oriented Programming ] 객체 지향 프로그래밍 객체 : 실생활에서 일종의 물건 속성( Attribute )과 행동( Action )을 가진다. OOP는 객체 개념을 프로그램으로 표현. 속성은 변수( Variable ), 행동은 함수( Method )으로 표현한다. 파이썬 역시 객체 지향 프로그래밍 언어이다. OOP는 클래스( class )와 실제 구현체인 인스턴스( instance )로 나눔. ex) 붕어빵틀 - class, 붕어빵 - instance class와 instance 1. class 선언하기 class [ class 이름 ]( object ) : 상속받는 객체명 Attribute 추가는 __init__, self와 함께 써줘야한다. __init__.. 2022. 1. 24.
[ AI 코칭스터디 ] 1주차 학습 ( Python Data Structure ) [ Python Data Structure ] stack 스택( stack )은 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조이다. Last In First Out ( LIFO ) 구조라 한다. Data의 입력을 Push, 출력을 Pop이라 한다. 리스트를 사용해서 스택 구조를 구현이 가능하다. push를 append(), pop을 pop()을 사용하면 된다. * pop()은 리턴이 존재하면서도 리스트 자체가 변한다. 스택 구조에서는 데이터를 넣었다가 빼줘야하기 때문에 맨 끝에 있는 데이터가 pop()에 할당이 된다. a = [1,2,3,4,5] print(a) # [1, 2, 3, 4, 5] a.append(10) print(a) # [1, 2, 3, 4, 5, 10] c = a.pop() .. 2022. 1. 21.
[ AI 코칭스터디 ] 1주차 학습 ( String and advanced function concept ) [ String and advanced function concept ] 문자열 ( String ) 문자열( string ) : 시퀀스 자료형으로 문자형 데이터를 메모리에 저장 영문자 한 글자는 1byte의 메모리 공간을 사용 * 1 byte = 8 bits = 2^8 = 256 까지 저장 가능 * UTF-8에서 8은 8bits를 의미한다. 문자열의 각 문자는 개별 주소인 offset을 가진다. offset을 이용해서 할당된 값을 가져오는 것을 인덱싱이라 한다. ( List와 같은 형태로 데이터를 처리한다. → 문자열 slicing 가능, ) len(a) 문자열의 길이 및 문자 개수 반환 a.upper() / a.lower() 문자열을 대문자 / 소문자로 변환 a.capitalize() 문자열의 첫 문자.. 2022. 1. 21.
[ 객체 지향 프로그래밍 ] 3일차 ( 객체 지향 언어 ) [ 객체 지향 언어 ] 파이썬은 모든 것이 객체인 순수 객체 지향 언어이다. 1 : int 클래스로 만든 1을 나타내는 인스턴스 "" : str 클래스로 만든 빈 문자열을 나타내는 인스턴스 가변 VS 불변 타입 가변 타입 객체 : 한번 생성한 인스턴스의 속성 변경 가능 ex) 리스트 클래스 불변 타입 객체 : 한번 생성한 인스턴스의 속성 변경 불가 ex) 튜플 클래스 mutable_object = [1,2,3] immutable_object = (1,2,3) mutable_object[0] = 4 print(mutable_object) # [4,2,3] immutable_object[0] = 4 print(immutable_object) # 에러 불변 타입이라 해도 변수가 가리키는 객체 자체는 바꿀 수 .. 2022. 1. 21.