분류 전체보기
-
Python: 객체 지향 프로그래밍을 위한 4가지 기본개념 (상속, 추상화, 캡슐화, 다형성)1Python 2020. 8. 16. 13:34
객체 지향 프로그램을 다루기 위해서는 알아야 할 4가지 기본개념에 대해 알아봅시다. 크게 4가지로 나뉩니다. 상속 추상화 캡슐화 다형성 하나씩 차례로 알아봅시다. 재산상속할때 그 상속입니다. 사전적 의미를 살펴보면 상속은 일정한 친족 관계가 있는 사람사이에서 한 사람이 다른 사람에게 재산에 관한 권리와 의무의 일체를 이어 받는 일이라고 합니다. 상속이라는 의미 그대로 상속을 해주는 클래스를 부모 클래스, 상속을 받는 클래스를 자식클래스로 정합니다. 그리고 자식클래스는 부모클래스의 모든것을 물려받습니다. 자식 클래스는 부모 클래스의 함수와 변수를 물려받아 사용하고 필요할때는 부모 클래스의 함수와 변수를 바꾸어 사용하기도 합니다. 함수를 바꾸어 사용하는 것을 오버라이딩(overriding)이라고..
-
Python: 파이썬 데코레이터(Decorator) 공부하기!Python 2020. 8. 15. 20:35
파이썬의 데코레이터 기능에 대해 알아봅시다. Decorate의 사전적 의미는 장식하다, 꾸미다 이러한 의미인데요 그렇다면 파이썬에서 데코레이터(decorator)는 어떠한 역할을 할까요? 데코레이터는 메소드를 꾸밉니다. 좀 더 정확하게 말하면 메소드를 매개변수로 받아서 기존함수에 부가적인 기능을 추가하여 사용할 수 있도록 합니다. 예제를 확인해봅시다. def add_print_to(inner): def outer(): print("함수 시작") inner() print("함수 끝") return outer add_print_to 함수는 inner라는 메소드를 매개변수로 받습니다. inner는 outer()라는 외부 함수로 둘러 쌓이고 "함수 시작" 과 "함수 끝"이라는 출력문으로 꾸며집니다. add_pr..
-
Python: 객체지향언어? 클래스(class)? 기초 공부하기!Python 2020. 8. 15. 17:31
클래스(class)를 공부하기 위해서는 먼저 객체지향언어에 대해서 알아야 합니다. 왜냐하면 파이썬은 순수 객체지향언어이기 때문이죠 우선 객체란 무엇일까요? 객체는 '속성과 동작'을 가진 어떤 것을 의미합니다. 사실상 세상의 모든 것입니다. 길바닥에 굴러다니는 돌도 객체라고 할 수 있고, 이 블로그도 하나의 객체라고 할 수 있습니다. 객체는 각각 속성과 동작을 지니는데 이러한 객체들간의 소통을 담은 언어가 객체지향언어입니다. 예를 들어 기차역에서 승차권을 발매하는 경우, '객체'인 손님과 '객체'인 역무원은 소통을 함으로써 '객체'인 승차권을 얻습니다. 손님은 승차권을 이용해서 '객체'인 기차를 이용합니다. 이렇게 객체들은 소통합니다. 그리고 이러한 소통을 담은 언어가 객체지향언어입니다. 참고로 객체지향 ..
-
알고리즘: 백준 10610번 30 (feat. Python)알고리즘/백준(BaekJoon) 2020. 8. 8. 17:55
백준 10610번 링크입니다. https://www.acmicpc.net/problem/10610 10610번: 30 문제 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶� www.acmicpc.net 30의 배수가 되기 위한 조건은 어떤수 N이 10의 배수이고 3의 배수인 경우이다. N이 10의 배수가 되기 위한 조건 = N안에 0이 포함되어 있으면 성립 N이 3의 배수가 되기 위한 조건 = N의 모든 자리수를 더했을 때 3의 배수이면 성립 이 두 조건만 성립하면 최대값은 N을 그냥 그대로 내림차순 정렬한 값이다. import sys input = sys.std..
-
알고리즘: 백준 2217번 로프 (feat.Python)알고리즘/백준(BaekJoon) 2020. 8. 8. 16:51
백준 2217번 링크입니다. https://www.acmicpc.net/problem/2217 2217번: 로프 N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 www.acmicpc.net 로프들이 견딜 수 있는 리스트를 만들어 오름차순으로 배열한다. 만약 10, 25, 30가 로프가 버틸 수 있는 최대중량으로 주어진다면 10 x 3 = 30 25 x 2 = 50 30 x 1 = 30 으로 최대 버틸 수 있는 중량은 50이 된다. ropes[i] * (n - i) 들로 이루어진 리스트의 최대 값을 찾으면 되는 것이다. import sys input ..
-
알고리즘: 백준 1932번 회의실 배정 (feat.Python)알고리즘/백준(BaekJoon) 2020. 8. 8. 16:22
백준 1932번 링크입니다. https://www.acmicpc.net/problem/1931 1931번: 회의실배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 최대 사용할 수 있는 회의의 수를 구하기 위해서는 가장 빨리 회의가 끝나는 순으로 회의를 나열한다. 회의의 끝나는 시간을 오름차순으로 배열한 후 전 회의의 시작시간과 다음 회의의 끝나는 시간을 비교하여 리스트를 담는다. 처음에 2차원 리스트의 두번째 요소만 배열하기 위해서 이중 for문을 사용했지만 O(n) = n^2가 되기 때문에 시간초과가 되었다. 그래서 lambda x: x[1]를 key로 받아 sort 함으로써 문제를 해결하였다. import sys input = sys.stdi..
-
알고리즘: 백준 11047번 동전0 (feat.Python)알고리즘/백준(BaekJoon) 2020. 8. 8. 15:27
4200원을 만드는데 필요한 동전의 갯수가 최소가 되게하기 위해선 가장 큰 동전으로 나누어 나가면 된다. 4200원 다음으로 가장 동전은 1000원이므로 4200 // 1000 = 4 ... 200 200 //100 = 2 ... 0 이므로 4 + 2 = 6이다. import sys input = sys.stdin.readline n, k = map(int, input().split()) money_list = [] for i in range(n): money_list.append(int(input())) change_count = 0 for i in range(n - 1, - 1, -1): if k == 0: break tmp = (k // money_list[i]) change_count += tmp..
-
알고리즘: 백준 11399번 ATM (feat. Python)알고리즘/백준(BaekJoon) 2020. 8. 8. 15:19
3 1 4 3 2을 입력으로 받을 때 돈을 인출하는데 걸리는 시간의 합은 3 x 5 + 1 x 4 + 4 x 3 + 3 x 2 + 1 x 1 입니다. 직관적으로 3 1 3 4 2를 오름차순으로 배열해서 각각 5부터 1까지 곱한다면 돈을 인출하는데 걸리는 시간이 최소가 됨을 알 수 있습니다. import sys input = sys.stdin.readline n = int(input()) get_time = list(map(int, input().split())) total = 0 get_time.sort() for i in range(n): total += (n - i) * get_time[i] print(total) 5 3 1 4 3 2 32 Process finished with exit code 0