반응형

분류 전체보기 209

점근적 표기법-1(Big-O)

알고리즘의 효율성(성능)을 따질 때 기준이 되는것은 보통 '수행시간'과 '저장공간'이 됩니다. 이번에는 '수행시간'의 관점에서 효율성을 판단할 때 사용되는 점근적 표기법에 대해서 알아봅시다. 알고리즘의 효율성을 따질 때 입력의 크기가 작으면 효율성에 상관 없이 금방 수행이 끝나기 때문에 효율성을 따질 때에는 '입력의 크기가 충분히 크다'라고 가정하고 판단합니다. 점근적 표기법은 '입력의 크기가 충분이 클 때' 변수가 커짐에 따라 함수가 증가하는 비율을 표현하는 방법입니다. 예를 들어 n+10000000이라는 함수와 n^2+1이라는 함수가 있다고 생각해봅시다. n이 작을 때에는 왼쪽의 함수가 값이 더 크겠지만, 점근적 표기법에서의 '입력이 크기가 충분히 크다'라고 가정하고 생각해봤을 때 n이 당장 1000..

알고리즘 2020.11.30

파이썬 30. 예외 처리

이번 글에서는 예외 처리에 대해서 알아보도록 하겠습니다. 예외 처리 지금까지 파이썬에 대해 알아보면서, 또는 파이썬으로 프로그램을 만들면서 우리들은 많은 오류 메시지들을 봐왔습니다. 이런 오류들을 보는것은 프로그래머라면 매우 당연하고, 중요한 일일 것입니다. 그런데 어떤 때에는 의도적으로 이 오류에 대해서 특정한 작업을 수행하고 싶은 경우가 생기는데, 파이썬에선 이러한 예외 처리를 위해 try~except를 지원하고 있습니다. 일단 간단한 오류를 한 번 발생시켜봅시다. print(a) 간단하게 선언하지 않은 변수 a를 출력하도록 하여 오류를 발생시켜봤습니다. "그러면 NameError: name 'a' is not defined."라고 오류 메시지가 출력됩니다. 간단하게 a를 찾을 수 없다는 말이죠. 이..

파이썬 29. 패키지

이번 글에서는 패키지에 대해서 알아보도록 하겠습니다. 패키지 패키지는 저번 글에서 알아본 모듈을 도트(.)를 사용해 계층적으로 관리할 수 있게 해줍니다. 예를 들어 모듈명이 myPack.myMod라면, myPack이 패키지명, myMod은 myPack패키지의 모듈이 되는겁니다. 이렇게 용도에 따라 모듈을 분류해놓으면 유지 보수나 사용하기가 편할 것입니다. 그럼 바로 패키지를 만들어서 그곳에 모듈을 넣어보도록 합시다. 먼저, 현재 프로젝트의 루트 디렉터리로 가줍시다. 저는 pyCharm을 사용중인데, 이 경우 C:\users\사용자\PyCharmProject에 가시면 현재 pyCharm에서 생성한 프로젝트들이 모여있는 디렉터리로 이동할 수 있습니다. 다음으로 해당 디렉터리에 원하는 이름의 폴더를 하나 만들..

백준 1700. 멀티탭 스케줄링(파이썬)

자세한 문제 내용은 아래 링크로 가주세요. www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 접근 방법 일단 문제는 플러그를 빼는 횟수를 최소한으로 해서 그 회수를 출력하는 문제입니다. 자 그럼 차근차근 풀어나가 봅시다. from sys import stdin N, K = stdin.readline().split() N = int(N) K = int(K) multap = [0] * N li = list(map(int, stdin.readline().split(..

백준 2020.11.25

백준 1202번. 보석 도둑(파이썬)

자세한 문제 내용은 아래 링크로 가주세요. www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 접근 방법 답을 구하는 법 자체는 어렵지 않은데, 시간 초과 때문에 애먹었던 문제입니다. 보석의 무게와 가격 M, V가 있고, 가방에 담을 수 있는 최대 C가 있습니다. 그럼 M이 C이하인 것 중에 가장 V가 큰 원소를 구해서 더하면 되는 문제라고 생각해서 접근해봤습니다. N, K = stdin.readlin..

백준 2020.11.24

백준1449번. 수리공 항승(파이썬)

백준 알고리즘 1449번 수리공 항승 문제입니다. 자세한 문제는 사진을 읽어보시기 바랍니다. www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 접근 방법 간단한 문제인데, 먼저 문제에서 중요한 부분은 물을 막을 때 좌우 0.5만큼 간격을 줘야 한다는 부분입니다. 이말은 즉 연속하는 물이 새는 부분은 그 길이의 합이 L+1이하이면 하나의 테이프로 다 막을수 있다는 뜻이죠. 이 정도 생각했으면 문제는 다 푼거나 마찬가지입니다. N, L = inpu..

백준 2020.11.23

파이썬 28. 모듈

이번 글에서는 모듈에 대해서 알아보도록 하겠습니다. 모듈 모듈은 클래스, 함수, 변수 등을 저장해놓은 파일들을 말합니다. 우리는 이러한 모듈들을 불러와서 그 안에 있는 내용을 사용할 수 있는데, 파이썬에 이미 내장되어있는 모듈도 있고, 우리가 직접 모듈을 만들어서 나중에 사용할 수 도 있습니다. 예를 들어 사칙연산이라는 모듈을 만들어 그 안에 사칙연산을 하는 클래스, 함수를 만들어 저장한 뒤 해당 모듈을 다른 프로그램에서 불러들여 사칙연산을 수행할 수 있습니다. 그렇다면 이제 실제로 모듈을 만들어서 사용하는 법에 대해서 알아봅시다. 먼저, 프로젝트 폴더를 우클릭해서 원하는 이름의 .py파일을 하나 만듭니다. 전 myCal이라는 파일을 하나 생성해주겠습니다. 그리고 위와 같이 사칙연산과 mod연산을 수행하..

파이썬 27. 메서드 오버라이딩

이번 글에서는 메서드 오버라이딩과 연산자 오버로딩에 대해서 알아보도록 하겠습니다. 메서드 오버라이딩 메서드 오버라이딩의 경우 상속개념 중 꼭 알아야 하는 것 중 하나입니다. 오버라이딩의 사전적 의미는 "우선하다, 중단시키다"인데, 부모로부터 상속받은 메서드를 자식클래스에서 재정의할 때 이를 오버라이딩이라고 합니다. 여기서 말하는 재정의는 이름만 같고, 메서드의 내용은 변경시키는 것을 의미합니다. 저번 글에서 상속관계에서 동일한 이름을 가진 메서드의 우선수위에 대해 이야기했는데, 자식클래스가 가장 먼저라는 것이 바로 이 오버라이딩 때문입니다. 예를 들어 부모클래스에 fun1이라는 메서드가 있고, 자식클래스에서 다시 fun1이라는 메서드를 정의하면 자식클래스의 인스턴스에서 호출되는 것은 자식클래스의 fun1..

파이썬 26. 상속

이번 글에서는 클래스에 이어서 클래스 상속에 대해서 알아보도록 하겠습니다. 상속 상속은 객체지향 언어에서 매우 중요한 개념 중 하나인데요, 이 상속은 과연 뭘까요? 먼저 '상속'이라는 단어의 뜻을 생각해봅시다. 구글에 검색하면 '상속이란 사람의 사망에 의한 재산 및 신분상의 지위의 포괄적인 승계를 말한다.'라고 나옵니다. 간단하게 말하면 자신의 재산을 다른사람에게 물려주는 것을 이야기합니다. 객체지향 언어에서는 이 개념이 클래스 사이에서 적용될 수 있습니다. 특정한 한 클래스가 다른 클래스에게 자신이 가진 모든 변수와 메서드, 즉 클래스의 기능을 전해주는 것을 '상속'이라고 합니다. 중요한 점은 다른 클래스에게 상속을 해줘도 상속해준 본래 클래스도 계속해서 사용할 수 있다는 점입니다. 말로 설명하면 어려..

파이썬 25. 클래스-2

저번 글에 이어서 클래스에 대해서 알아보도록 하겠습니다. self 먼저, 저번 글에서 등장했지만 뒤로 미루어 둔 self라는 놈에 대해서 알아보겠습니다. class TV(): power = False def powerChange(self): self.power = not self.power t1 = TV() t2 = TV() print("t1의 전원 : {}, t2의 전원 : {}".format(t1.power, t2.power)) t1.powerChange() print("t1의 전원 : {}, t2의 전원 : {}".format(t1.power, t2.power)) 저번 글에서 위와 같은 클래스를 정의했었는데, powerChange라는 함수를 정의했을 때 매개변수로 self가 자동으로 들어가는 것을 ..

반응형