목록프로그래밍 언어 (36)

수학과의 좌충우돌 프로그래밍

[python] Decimal vs Float, 고정소수점과 부동소수점

Float 우선 특별한 작업없이 소수를 사용할 경우 이는 float 타입으로 선언이 됩니다. 하지만 아래 결과를 보면 0.1을 할당한 a는 실제로 0.1이 아닌 많은 소수점을 가지고 있습니다. 왜 이런 문제가 발생하는 것일까요? a = 0.1 print(type(a)) print(f"{0.1: .30f}") # # 0.100000000000000005551115123126 컴퓨터가 실수를 표현하는 방식 아마 다들 아실테지만 컴퓨터는 기본적으로 2진수를 사용합니다. 그렇기 때문에 정수를 표현할 때는 문제가 되지 않지만 소수를 표현할 때는 문제가 발생합니다. 예를 들어 10진수 0.3을 2진수로 표현한다고 하면 0.01001100110011... 다음과 같이 표현이 됩니다. 무한히 0011이 반복되죠. 이러..

프로그래밍 언어/Python 2020. 6. 10. 23:15
[python] 파이썬의 정렬, Tim Sort

Tim Sort python에서의 정렬 함수 sorted()와 list.sort()에 사용된 정렬 알고리즘은 Timsort, 팀정렬입니다. 팀정렬은 파이썬 핵심 개발자인 팀 피터스에 의해서 Cpython에서 처음으로 구현되었으며 2009년 이후 표준 자바 및 안드로이드, swift 등 여러 언어에서 사용되고 있습니다. 이는 데이터의 정렬된 정도에 따라 삽입정렬과 병합정렬 사이를 전환하는 적응형 알고리즘입니다. 두 정렬방법을 결합했기에 안정적이며, 추가 메모리는 사용하지만 기존의 병합정렬에 비해 적은 추가메모리를 사용하여 다른 O(nlogn) 정렬 알고리즘의 단점을 최대한 극복한 알고리즘입니다. 알고리즘의 원리 위에서 언급했듯이 팀정렬은 삽입정렬과 병합정렬을 함께 사용하고 있습니다. 병합정렬은 추가적인 메..

프로그래밍 언어/Python 2020. 6. 3. 03:20
[C++] 연산자 오버로딩(Overloading)

오버로딩이란? 오버로딩(Overloading)은 메서드의 이름은 하나만 주고 매개변수(parameter)를 다르게 함으로써 메서드를 여러개 만드는 것을 말합니다. 예를 들어볼까요? 정수와 실수에 대해서 덧셈을 하는 두 함수를 정의해보았습니다. int intSum (int a,int b){ return a+b; } double doubleSum (double a, double b){ return a+b; } 지금은 함수가 두 개라서 문제없어 보이지만 여러 자료형에 대해서 다루고 싶은 경우에는 각각 함수를 새로 만들어야 합니다. 함수의 내부는 같은데 계속 이름도 지어야하고, 이만저만 불편합니다. 그래서 나온 개념이 바로 오버로딩 입니다. 여러 개의 이름을 쓸 필요없이 같은 이름을 사용할 수 있는 것이죠. i..

프로그래밍 언어/C++ 2019. 10. 3. 17:53
[python] 장식자, 데코레이터(decorator) 를 알아보자

python 으로 작성된 다른 코드들을 보다보면 아래와 같이 어느 함수 위에 @ 가 있는 걸 볼 수 있습니다. 이 @ 는 무엇을 나타내고 어떤 역할을 하지는 알아보도록 합시다. @decorator def function1(): print("ssungkang") decorator 란? 제목에서 알 수 있듯이 이것이 바로 decorator 입니다. 사실 데코레이터가 없다고 해서 구현을 못하는 일이 생기는 건 아니지만 코드가 복잡해집니다. 즉 사용자가 편리해지기 위한 것 이라고 생각하면 됩니다. 지금부터 decorator 에 대해서 알아보도록 하겠습니다. decorator 는 사실 하나의 함수입니다. 어떤 함수냐면 다른 함수를 감싸고 있는 함수죠. 아래 예시를 봐보도록 합시다. def decorator(fun..

프로그래밍 언어/Python 2019. 8. 8. 03:11
[Java] GUI 기초, 자주 사용하는 컴포넌트들을 정리해보자

AWT와 Swing 자바에서 사용할 수 있는 GUI 로는 AWT와 Swing 이 있습니다. 먼저 이 둘을 비교해보도록 하겠습니다. AWT Swing 초기에 지원했던 GUI 상대적으로 늦게 나온 GUI 운영체제가 사용하는 자원을 사용 컴포넌트가 자바로 되어있음 플랫폼 의존적 플랫폼 독자적 컴포넌트 용량이 큼 컴포넌트 용량이 가벼움 컴포넌트 개수가 적음 컴포넌트 개수가 많음 이렇게만 비교해봐도 Swing이 더 좋아보이기 때문에 Swing에 대해서 알아보도록 하겠습니다. AWT가 먼저 출시되었고 Swing이 늦게 나왔기 때문에 두 클래스 이름은 충돌이 일어납니다. 따라서 Swing은 기존의 클래스 이름 앞에 J를 추가하여 나타냅니다. 버튼을 예로 들면 AWT에서는 Button으로, Swing에서는 JButto..

프로그래밍 언어/Java 2019. 5. 15. 21:54
[java]클래스를 알아보자 2

정적 멤버 경우에 따라서 한 클래스의 여러 객체들이 하나의 변수를 공유해야하는 경우가 생긴다. 이러한 맴버를 정적 멤버 또는 클래스 멤버라고 한다. 정적 맴버를 만드는 방식은 단순히 필드를 정의할 때 앞에 static을 붙여서 구현한다. 정적 변수 class Student { static int count = 0; } 또한 정적 멤버는 객체없이도 접근이 가능하다. 클래스 이름 뒤에 . 과 정적 멤버를 연결시켜준다. 물론 객체를. 통한 접근도 가능하다. Student.count += 1; 정적 변수와 상대되는 개념을 인스턴스 변수라고 한다. 인스턴스 멤버는 각 객체 마다 독립적인 기억공간을 가지고 당연히 값도 다 다를 수 있다. 자바에서는 전역 변수가 없기 때문에 정적 변수를 사용하여 전역 변수의 개념처럼..

프로그래밍 언어/Java 2019. 4. 10. 16:17
[python]제너레이터(generator)를 알아보자

파이썬 제너레이터 일반적인 함수부터 생각을 해보자. 함수는 한 번 호출되면 return을 만날 때까지 혹은 return이 없다면 마지막 구문을 만날 때까지 실행된다. 그리고 호출이 끝나는 순간 내부 함수나 로컬 변수들은 메모리를 반환하게 된다. 이는 함수가 다시 호출되어도 마찬가지로 같은 일을 반복한다. 이런 함수의 한계점에 봉착하여, 함수가 본인이 한 일을 기억하고 있다가 재 호출 시 이어서 할 수 있도록 새로운 함수를 만들었는데 이를 제너레이터라고 한다. 제너레이터가 무엇인지 예제를 통해서 알아보자. def normal_function(list): result = [] for i in list: result.append(i * i) return result input = [1,2,3,4,5] resu..

프로그래밍 언어/Python 2019. 3. 31. 21:44
[java]클래스에 대해 알아보자

클래스 클래스 정의 클래스는 class 키워드로 시작한다. 이어서 클래스의 이름을 적고 중괄호 안에 필드와 메소드를 나열하는 형식이다. public class Dog { String name; void bark() { System.out.println("왈왈"); } } Dog라는 클래스 이름으로 필드로는 강아지의 이름 name 을 메소드로는 강아지의 울음소리를 출력하는 bark() 를 정의했다. 이들은 클래스의 맴버 라고 불리며 위와 같이 필드는 상태를 메소드는 동작을 나타낸다. 객체 생성 클래스는 객체를 만들기 위한 틀에 불과하다. 이 틀로 객체를 찍어내야한다. 위에서 정의한 Dog 클래스의 객체를 생성해보자. class Dog { String name; void bark() { System.out...

프로그래밍 언어/Java 2019. 3. 28. 03:05