일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 동적프로그래밍
- 알고리즘
- 주키퍼
- 프로그래머스
- dynamic programming
- docker
- leetcode
- Linux
- 코드워
- scala
- 스칼라
- HBase
- 문제풀이
- OOM
- 자바
- golang
- 리눅스
- 파이썬
- codewars
- redis
- DP
- 튜토리얼
- Python
- go
- boj
- Java
- Go언어
- gradle
- zookeeper
- programmers
- Today
- Total
목록파이썬 (24)
파이문
xn-- 과 같이 시작하는 URL 을 사람이 볼 수 있는 문자로 변경하기 URL 가지고 놀다 보면 xn-- 으로 시작하는 문자를 볼 수 있다. 이를 punycode 라고 하는데 알아 보기가 힘들어서 파이썬으로 간단하게 사람이 볼 수 있는 (human readable) 문자로 변경 가능한 예제를 작성하였다. 아래 처럼 idna 로 decode 하면 된다. 그 전에 해당 문자열은 반드시 punycode 여야 하므로 netloc 만 따로 떼서 진행해야 한다. from urllib.parse import urlparse def get_human_readable_text(org): url = urlparse(org) if url.scheme != "": return url.netloc.encode("utf8")...
파이썬 call-by-value 일까 call-by-reference 일까(Python call by value vs call by reference) 결론부터 말하자면 passed by assignment 라고 한다. 즉, 어떤 값을 전달하느냐에 따라 달라지는 것이다. 파이썬의 자료형엔 크게 immutable(불변) 과 mutable(가변) 이 있다.int, str 같은 타입이 불변이고 list, dictionary 같은 타입이 mutable 이다. 불변 타입의 객체를 넘기면 call by value 가 되고 가변 타입의 객체를 넘기면 call by reference 가 된다. 즉 할당 되는 것에 따라 전달 방식이 달라지는 것이다. 어떻게 이것이 가능할까? 바로 파이썬에선 모든 것이 객체이기 때문이다...
파이썬 딕셔너리의 키(Python dictionary key) 디시인사이드 프로그래밍 갤러리에 들어갔다가 재미난 글을 발견했다. "파이썬에서 다음 중 딕셔너리의 키로 쓸 수 있는 것들은?" 이라는 제목의 글이었는데, 다 돌려보았는데.. 일단 나는 답을 틀렸다 ㅠㅠa = lambda : 0 b = [0] c = (0,) d = {0} e = frozenset(d) f = {0: 0} class Foo: pass g = Foo() a, c, e, g이다. 나머지 것들은 딕셔너리의 키로 사용하지 못한다. 파이썬의 딕셔너리는 기본적으로 해시 키를 사용한다. 좋은 article을 몇 개 찾았는데 이 글 이 되게 좋은 것 같다. 그리고 frozenset 이라는걸 들어는 봤는데, 언제 쓰는지, 정확히 set 과 무슨..
518. Coin Change 2(https://leetcode.com/problems/coin-change-2/#/description) amount 를 coins의 값들로 만들 수 있는 모든 경우의 수를 리턴하는 문제다. 원래는 coin들로 recursive 하게 빼주다가 0이 되면 리턴하게 하는 식으로 하려고 했는데, 빼주었던 coin들을 어떻게 가지고 있어야 할지 구현하는게 어려워서 포기했다. 결국 DP로 풀었는데, 2차원 배열로 어떻게 하려다가 잘 안되서 그냥 인터넷에서 보고 구현했다. dp의 index값은 amount 값이 되고, 그렇기에 0원을 만들 수 있는 경우의 수는 1가지 (아무것도 없는 경우) 있기 때문에 dp[0] = 1 을 해준 상태에서 시작한다. amount 5, coins = ..
[Python] 파이썬 3.5 에서 MySQL 라이브러리 설치하기Error loading MySQLdb module: No module named 'MySQLdb'Django tutorial을 따라하면서 mysql을 연동하려 하는데, mysql-python이 설치되지 않았다. 분명 mysql 설치 시 Connector를 다 설치하였기 때문에 Connector 설치하라는 글은 넘겼고 도저히 원인을 파악하지 못했었는데, 알고보니 단순한 문제였다. Mysql에서 제공하는 Python Connector가 Python 2.7, 3.3, 3.4 버전만 지원하는 것이었다. 나의 경우엔 파이썬 3.5를 사용하였기 때문에 설치가 되지 않았던 것이다. (참고로 mysql-python은 C로 구현되어 있다.) 대안으로는 p..
540. Single Element in a Sorted Array(https://leetcode.com/problems/single-element-in-a-sorted-array/#/description) 어떤 List에 int 값이 들어있는데 하나의 숫자만 한개가 있고, 나머지는 모두 두개씩 있을 때, 그 하나만 존재하는 숫자를 리턴하는 것입니다. for문 두번 돌리면 간단히 해결하지만 조건이 붙었습니다. 공간 복잡도 O(1)에, 시간 복잡도가 (logN)입니다. logN이기 때문에 분할해야 하는데, 저는 재귀로 나누어가면서 풀었습니다.List의 정 가운데를 자른다고 생각하면 현재 숫자를 기준으로 왼쪽이 홀수개의 리스트면 왼쪽에 찾고자 하는 숫자가 있을 것이고 오른쪽이 홀수개의 리스트면 오른쪽에 있을..
101. Symmetric Tree(https://leetcode.com/problems/symmetric-tree/#/description) 대칭이 되는 트리인지 아닌지를 판별하는 문제입니다.아래와 같이 가운데(?) 를 기준으로 접혀진다면(대칭이 된다면) True를 리턴하고 1 / \ 2 2 / \ / \ 3 4 4 3한쪽이 비거나, 다른 숫자가 들어가거나 등등 대칭이 되지 않는다면 False를 리턴합니다. 1 / \ 2 2 \ \ 3 3 Easy 문제이기 때문에 어렵게 생각할 필요가 없습니다.문제 그대로 맨 왼쪽은 맨 오른쪽과 같아야 하고, 가장 왼쪽의 오른쪽은 (형제 노드는) 가장 오른쪽의 왼쪽 노드 (형제 노드)와 같으면 됩니다. 재귀로 계속 체크해나가면서, None이면 가장 끝의 노드이니 그 때..
파이썬에서 언더바의 의미 파이썬에서는 자바나 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(종)을 호출할 수 ..