일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- zookeeper
- boj
- codewars
- 파이썬
- 프로그래머스
- Go언어
- 동적프로그래밍
- 리눅스
- Python
- docker
- 튜토리얼
- dynamic programming
- 문제풀이
- 자바
- go
- gradle
- 코드워
- programmers
- OOM
- Java
- 스칼라
- HBase
- Linux
- redis
- 주키퍼
- DP
- leetcode
- scala
- 알고리즘
- golang
- Today
- Total
목록Python (27)
파이문
파이썬에서 언더바의 의미 파이썬에서는 자바나 C++과 다르게 private, public과 같은 예약어가 존재하지 않는다. 그래서 파이썬 프로그래머들은 데이터나 메서드의 이름에 특정 규칙을 적용하였는데 그것이 바로 언더바 이다. 아래의 예제는 언더바가 붙은 경우는 클래스의 내부 메서드이다.class A(object): def __init__(self): print("init") def __str__(self): pass def __repr__(self): pass def __del__(self): print("del")그러나, 파이썬은 내부 이름에 누군가 접근하는 것을 실제로 막지는 않기 때문에, 언더바가 붙은 메서드는 사용할 때 매우 조심해야 한다. 주로 클래스 내부 구현은 언더바 두개를, 기타 다른 ..
파이썬으로 크롤러 만들기(Python web crawler)크롤러는 크게 두 가지 일을 한다. 웹 페이지 다운로드다운로드한 웹 페이지 파싱여기서 예제로 구현할 크롤러 역시 위의 두 가지의 기능만을 갖고 있을 것이다. (다운로드할 url을 이미 갖고 있다는 전제에서 시작하겠다.) 예제로 구현할 나의 컴퓨터 환경은 OS의 경우 Windows 10이며 파이썬은 3.5버전이다. 그러나 2.7이랑 차이가 많이 나는 메서드로 구현하지 않을 것이기 때문에, print 함수만을 제외하면 동일하게 돌아갈 것이다. 라이브러리의 경우 다운로드는 requests를, 파서는 BeautifulSoup4를 사용할 것이다. 예제로 구현할 웹 페이지는 나무 위키를 선택하였으나 너무 느려서 그냥 오버워치 인벤으로 바꿨다. 선수 지식으로..
파이썬 클래스 상속(Python class inheritance) 클래스란 무엇인가?리스트나 문자열과 같은 구조는 정말 유용하지만 때때로 구현하고자 하는 것에 제약이 걸릴 때가 있다. 예를 들면 동물에 대한 정보를 담고 있는 구조를 원한다고 하자. 동물의 이름과 동물의 종에 대해 담고 싶지만 리스트나 문자열에는 내가 저장하고자 하는 정보를 모두 표현할 수가 없다. 이 때 클래스를 사용할 수 있다. 단지 Pet이라는 클래스를 만들고 attribute에 name과 species를 지정하면 된다. 인스턴스란 무엇인가?클래스를 만들기 이전에 앞서, 중요한 차이점 하나를 알고 있어야 한다. 바로 클래스는 구조를 포함하고 있다는 것이다. 예를 들어 Pet 클래스는 name(이름)과 species(종)을 호출할 수 ..
파이썬 얕은 복사와 깊은 복사(Python shallow copy, deep copy) 파이썬에서 리스트나 대부분의 컬렉션을 복사하는 가장 손 쉬운 방법은 그 자료형 자체의 내장 생성자를 사용하는 것이다.>>> l1 = [3, [55, 44]] >>> l2 = list(l1) # l2 = l1[:] >>> l2 [3, [55, 44]] >>> l1 == l2 True >>> l1 is l2 False 그러나 생성자나 [:] 키워드를 사용하면 얕은 복사(Shallow Copy)를 사용하게 된다. 사본은 원래 컨테이너에 들어 있던 동일 객체에 대한 참조로 채워지게 된다. 이 방식은 모든 항목이 불변형이면 메모리를 절약할 수 있지만 가변 항목이 들어있을 경우 예상치 못한 결과를 받게 될 수도 있다.>>> l1..
Number of Boomerangs(https://leetcode.com/problems/number-of-boomerangs/) 좌표의 범위가 각각 -1000부터 1000까지 되는 point가 최대 500개가 있을 때, 서로 다른 point 끼리의 거리 중 같은 것의 개수를 구하는 문제였습니다. 예를 들어 (0,0), (0,1), (0,2) 라는 point가 존재할 때 (1,0)과 (0,0)의 거리는 1이고 (1,0)과 (2.0)의 거리고 1입니다. 이 때, i를 (1.0)으로 두고 j를 (0,0) 또는 (2,0), k를 (2,0) 또는 (0,0)이라고 할 때 i와 j의 거리 그리고 i와 k의 거리가 같습니다. 이렇게 같은 거리를 갖게 되는 경우가 세 점 사이에서 총 2가지가 발생하는데요. 이 2를 ..
파이썬에서 switch-case문 사용하기(Python Switch-Case) 파이썬에서는 switch, case라는 키워드가 존재하지 않습니다. 그래서 어떤 입력에 대해서 case를 나누고 싶다면 주로 if-elif-else를 사용하곤 하죠. 아니면 딕셔너리를 이용해서 마치 switch-case문 처럼 사용할 수 있습니다.def f(x): return {'a': '1', 'b': '2'}[x]입력 x가 'a'라면 '1'을 리턴하고, 'b'라면 '2'를 리턴합니다.만약, 입력 값이 'a'도 'b'도 아닌 'c'라면 f('c')는 KeyError를 던지죠. 다른 언어의 switch-case문은 예외를 위해, 디폴트 값을 지정할 수 있는데요. 파이썬도 마찬가지로 디폴트로 값을 지정할 수 있습니다. def f..
파이썬에서 딕셔너리 키 값 체크하기(Python dictionary key exist) 파이썬에서 딕셔너리 키 값을 체크할 때 has_key 혹은 get을 사용하는 경우가 있었는데, 이에 대해서 무엇이 다르고 어떤 것이 가이드 라인(Pythonic)인지 정리해보고자 한다. 기존에 파이썬에서 딕셔너리를 만들고 키 값이 있는지 없는지 판별하는 아주 간단한 함수를 작성하였다.menu = {"ham" : 1, "cucumber" : -12, "egg" : 100}if menu.has_key("ham"):print "네, 찾는 것이 있네요"else:print "그런 메뉴는 없습니다."정말 아무 이상 없을 것 같은 코드이고, 실제로 제대로 동작한다.반대로 딕셔너리(메뉴)에 없는 키 값을 넣는다면 "그런 메뉴는 없습..
파이썬에서의 getter와 setter 파이썬에서 클래스를 작성하면서 getter와 setter를 만든 적이 있다. 아직까지 큰 프로그램(?)을 만들어본 적이 없어서 그냥 돌아가게만 만드는데 중점을 두었었는데, 최근 파이썬을 공부하면서 그것이 올바르지 않은 방법 이란 것을 깨달았다. 그동안 파이썬에서 많은 표준 라이브러리에 대한 함수를 사용하면서 한 번도 getXXX와 setYYY를 본적이 없었는데 궁금해 하지 않았다는게 스스로 신기할 정도였다. 서론이 길었는데 그렇다면 파이썬에서 기존에 자바처럼 getter와 setter를 사용하려면 어떻게 해야 하는가? 답은 바로 프로퍼티에 있다.사실, 아직 그렇게 프로퍼티나 데코레이터에 대한 개념이 확립되지는 않았다.일단 이렇게 작성하는게 옳은 거구나 하는 정도만 ..
Maximum Random Walks 백준온라인 저지 3946번 문제입니다. 스터디에서 풀기로 했던 문제였는데 저한테는 너무 어려운 문제였습니다. 문제 자체도 해석이 잘 안되었었는데요. 오히려 번역이 애매했습니다. 영문으로 된 설명을 스터디원 한테 들은 이후에야 문제가 이해가 갔습니다.(문제가 이해가 가는 것과 푸는 것은 또 별개였습니다. 2시간 반 넘게 고민했지만 못 풀어서 그냥 답안을 보기로 하였어요. 이제 2시간 반이 넘게 걸리는 문제는 왠만해선 끝까지 안 물고 늘어지려구요, 답 보고 공부하는 게 저한텐 훨씬 나은 것 같습니다.) 문제는 다음과 같습니다.동전 하나를 던질 때 뒷면이 나오면 왼쪽으로, 앞면이 나오면 오른쪽으로 걷습니다.다만 동전이 옆면이 나오는 경우도 있는데 이 경우엔 움지기이지 않기..
Consecutive strings 이 전까지의 문제가 그냥 믹스 커피였다면 이 문제는 카누 정도 되더군요. 일단 함수의 첫 번쨰 입력으로 연속된 문자열이 담겨 있는 리스트가 오게 됩니다. (다른 언어에선 배열) 그리고 두 번째 입력으로 int형(K) 숫자가 오게 되는데요. 이 두 값을 받아서 연속된 K개의 문자열이 가장 길어지는 경우를 return 해야 합니다. 말로는 어려운데 예를 들면 다음과 같습니다. ["a", "bc" , "def"] , 2 가 들어오게 되면 "bc" , "def" 두 개의 값의 총 길이는 5입니다. 이는 ["a", "bc" , "def"] 에서 2개를 골라 만들 수 있는 가장 긴 문자열 입니다. 단, 앞서 말했듯이 연속되어야 합니다. 그래서 예제로 테스트 해볼 수 있는 다음과 ..