본문 바로가기

분류 전체보기

(65)
아스키코드와 유니코드 부호화란?문자를 컴퓨터에 저장하기 위해서는 문자를 부호화해야 한다.예를 들어, 문자 'a'를 아스키코드로 부호화하면 0x61이 된다. 아스키코드1960년대 미국에서 정의한 표준 부호 체계7비트만을 사용, 1비트는 에러 검출용 parity bitSingle Byte Character Set(SBCS)0~127의 값을 가짐7비트밖에 사용하지 않기에 한글과 같은 다른 언어를 표현하기에는 부족 ➡️ ANSI 코드의 등장유니코드1991년대 최초 발표된 표준 부호 체계Wide Byte Character Set(WBCS)UTF-8, UTF-16, UTF-32 등 다양한 인코딩 방식이 있으며, 가장 널리 사용되는 것은 UTF-8.UTF-81~4바이트를 사용.Grapheme ➡️ Code Point ➡️ BytesGra..
디스크 파티션(diskpart) 명령어 정리 본 포스트는 윈도우의 디스크와 그 파티션을 관리할 수 있는 디스크 파티션(diskpart)의 명령어를 설명하고자 한다.파일시스템의 종류운영체제가 디스크에 파일을 저장할 때 특정 규칙을 가지고 저장해야 한다.운영체제는 특정 규칙에 따라 디스크의 섹터를 어떻게 나눌지, 파일 및 폴더 이름을 어떻게 지을지, 디스크과 운영체제가 어떻게 상호작용할지를 결정한다.이 규칙을 파일시스템이라고 한다.주로 사용되는 파일시스템에는 NTFS, FAT, exFAT가 있다.(* 참고로 맥은 APFS라는 애플 자체 파일시스템을 사용한다.)윈도우에서 주로 사용되는 파일시스템은 NTFS다.NTFS로 포맷된 디스크에는 최대  256TB를 할당할 수 있고 개별 파일의 최대 용량은 16TB까지 지원한다.사실상 제한이 없다고 보면되고 그렇기..
프로그래밍 대회 디버깅 프로그래밍 대회나 백준에서 푸는 문제를 풀 때 원하는 결과와 다르게 나온 경우, 어떻게 할까?대다수 디버거를 켠다.하지만 프로그래밍 대회에서는 디버거 사용을 권장하지 않는다. 프로그래밍 대회에서 작성되는 코드는 대부분 길지 않기 때문에 눈 디버깅이 가능할 뿐더러, 재귀 호출이나 반복문이 많이 사용되어 코드가 디버깅에 적합하지 않은 구조다. 디버깅 대신 사용할 수 있는 것들을 소개한다. 1. 작은 입력에 대해 제대로 실행되나 확인하기오동작하는 가장 작은 입력을 먼저 찾아내면 디버깅이 훨씬 용이해진다.2. 단정문(assertion) 사용하기단정문이란, 주어진 조건이 거짓일 때 오류를 내고 프로그램을 강제 종료싴키는 함수 또는 구문을 의미한다.주어진 조건이 참일 때는 무시된다. 함수에서 넘겨받은 인자들이 범위..
알고리즘 문제 해결 방법 1단계. 문제를 읽고 이해하기2단계. 문제를 익숙한 용어로 재정의문제를 추상화하여 재정의한다.현실 세계의 개념을 다루기 쉬운 수학적 개념으로 옮겨 재정의한다.어떻게, 어떤 부분을 추상화할 것인지에 따라 프로그램이 나아갈 방향이 정해진다.3단계. 문제 해결 계획 세우기문제를 어떻게 해결할지 결정하고, 사용할 알고리즘과 자료구조를 선택한다.3-1. 무식한 방법으로 풀 수 있을까? → 시공간 제약이 따른다면, 자료구조 개선 및 최적화 기법 적용하는 점직전인 개선3-2. 내가 문제를 푸는 과정을 수식화할 수 있을까?예제 입력을 손으로 풀어본다.위 과정을 공식화·수식화 해본다.예제  : QUANTIZE, NUMB3RS, RESTORE, MATCHORDER, POTION, TRAPCARD3-3. 문제를 단순화해볼 ..
Python 연산자 오버로딩을 위한 스페셜 메서드 정리 연산자 오버로딩이란? 연산자 오버로딩(Operator overloading)이란, 사용자 정의 클래스에서 기존에 정의된 연산자(+, -, *, / 등)의 동작을 재정의하는 것을 말한다. 이를 통해 사용자 정의 데이터 타입에 대해 연산자를 사용하여 직관적으로 작업할 수 있다. class Number: def __init__(self, value): self.value = value def __str__(self): return str(self.value) def __add__(self, other): if isinstance(other, Number): return Number(self.value + other.value) if isinstance(other, (int, float, bool)): retu..
Python 클로져 함수(Closure Function) Python 언어의 특징 Python은 동적 언어이기 때문에 클래스에서 정보의 은닉을 지원하지 않는다. 사용자가 만약 클래스나 객체 변수에 접근하여 프로그램에 잘못된 동작이 일어날 수 있다. 다른 언어는 private, public 등의 키워드를 제공하여 이런 가능성을 원천 차단해버리지만 Python은 가능성을 열어두고 잘못된 동작이 일어날 시 이를 사용자의 책임으로 전가한다. Python처럼 클래스 정보의 은닉을 지원하지 않는 언어에서 정보의 은닉을 사용하고 싶을 때 사용할 수 있는 것이 클로져 함수(Closure Function)다. 클로져 함수(Closure Function) 클로져 함수의 필요성을 다음과 같이 정리할 수 있겠다. 1. 클래스 없이 객체를 만들고 싶을 때 2. 정보를 은닉하고 싶을 ..
Python 패킹(packing) 언패킹(unpacking) 총정리 리스트 언패킹 li = [1, 2, 3, 4] a, b, c, d = li 스타를 활용한 리스트 언패킹 li = [1, 2, 3, 4] a, *b, c= li # a = 1, b = [2, 3], c = 4 튜플 언패킹 tu = (1, 2, 3, 4) a, b, c, d = tu 함수 인자 언패킹(딕셔너리 언패킹) def my_function(a, b, c, d): print(a, b, c, d) di = dict(a=1, b=2, c=3, d=4) # * : key unpacking # ** : value unpacking my_function(*di) # a b c d my_function(**di) # 1 2 3 4 * 주의 : **를 사용하여 value unpacking 시 함수의 매개변수 이름과..
Python 제너레이터(Generator) 제너레이터(Generator)란? 제너레이터란, 반복 가능한 객체(iterable)를 만드는데 사용되는 함수다. 제너레이터를 만들기 위해서는 yield 키워드를 사용한다. 제너레이터를 만드는 방법에는 크게 2가지가 있다. 제너레이터 함수를 이용한 방법 제너레이터 표현식을 이용한 방법 제너레이터 함수 def generator(): print("hello, 1") yield 1 print("hello, 2") yield 2 print("hello, 3") yield 3 제너레이터를 정의하기 위해서는 위와 같이 함수에 yield 키워드를 사용하면 된다. yield 키워드 다음에 오는 값을 반환한다. gen = generator() print(gen) >> 제너레이터 객체를 만들려면 함수를 호출하면 된다. ge..
Python 연결 리스트(Linked List) 연결 리스트(Linked List)는 데이터 요소들을 순서대로 저장하는 자료구조다. 연결리스트는 위 그림처럼 노드로 이루어져 있다. 각 노는 데이터와 다음 노드를 가리키는 포인터(Pointer)로 이루어져 있다. 이 포인터는 다음 노드의 위치를 가리키므로, 데이터 요소들이 메모리에 연속적으로 저장되지 않아도 된다. 앞서 배운 클래스를 통해 파이썬으로 노드와 연결리스트를 구현해보자. class LinkedList: def __init__(self): self.head = None pass def insert_head(self, data): new_node = LinkedList.Node(data, self.head) self.head = new_node pass class Node: def __init__..
Python 싱글턴 패턴(Singleton Pattern), 반복자 패턴(Iterator Pattern), 데코레이터 패턴(Decorator Pattern) 디자인 패턴이란? 디자인 패턴이란, 소프트웨어 개발에서 반복적으로 발생하는 문제에 대한 해결책을 제공하는 일종의 템플릿이다. 이러한 패턴들은 개발자들이 공통된 문제를 해결하기 위해 검증된 방법을 활용할 수 있도록 도와준다. 디자인 패턴은 특정한 상황에서 특정한 목적을 달성하기 위해 소프트웨어 디자인을 조직화하고 구조화하는 방법을 제시한다. * 디자인 패턴의 장점 디자인 패턴을 사용하면 유지보수가 용이하고, 코드 가독성, 코드 재사용성, 확장성이 향상되는 등 다양한 장점이 있다. * 디자인 패턴의 종류 싱글턴 패턴(Singleton Pattern), 멀티턴 패턴(Multiton Pattern), 반복자 패턴(Iterator Pattern), 팩토리 패턴(Factory Pattern) 등 다양한 디자인 패턴..