분류 전체보기
-
1. Introduction 파이썬에서 in 연산자는 검색이나 순회에 사용된다. 순회는 항상 전체를 순회하니까 효율의 개선이 필요하다고 느껴지 않지만, 검색은 그렇지 않다. 이번 포스트에서는 in의 검색 효율이 자료구조에 따라 어떻게 바뀌는지를 알아본다. 2. Detail 파이썬에서 리스트와 튜플은 array로 구현된다. 따라서, 알맞은 원소를 찾아내기 위해서는 array를 처음부터 끝까지 순회할 수 밖에 없다. 리스트와 튜플에 대한 in 연산자의 시간복잡도는 $O(n)$이다. 반면에, 셋과 딕셔너리는 hash로 구현된다. hash에 검색 성능이 hash function에 의존하는 만큼, 성능이 최선일 때 $O(1)$에서 최악일 때 $O(n)$까지 요동친다. 웬만한 경우에서, 특히 고정된 리스트에서 검색..
파이썬에 in 연산자의 시간복잡도는 얼마일까?1. Introduction 파이썬에서 in 연산자는 검색이나 순회에 사용된다. 순회는 항상 전체를 순회하니까 효율의 개선이 필요하다고 느껴지 않지만, 검색은 그렇지 않다. 이번 포스트에서는 in의 검색 효율이 자료구조에 따라 어떻게 바뀌는지를 알아본다. 2. Detail 파이썬에서 리스트와 튜플은 array로 구현된다. 따라서, 알맞은 원소를 찾아내기 위해서는 array를 처음부터 끝까지 순회할 수 밖에 없다. 리스트와 튜플에 대한 in 연산자의 시간복잡도는 $O(n)$이다. 반면에, 셋과 딕셔너리는 hash로 구현된다. hash에 검색 성능이 hash function에 의존하는 만큼, 성능이 최선일 때 $O(1)$에서 최악일 때 $O(n)$까지 요동친다. 웬만한 경우에서, 특히 고정된 리스트에서 검색..
2020.08.12 -
1. Introduction 파이썬으로 이미지 관련 코딩을 하다보면, 두 이미지가 같은지 검사해야 할 일이 생긴다. 직접 짜야한다면, 크기를 비교하던가, 각 픽셀값으로 머클트리를 만들던가 하겠지만 파이썬에서는 간편한 메서드를 지원한다. filecmp 라이브러리의 cmp 메서드는 두 파일간의 동일성을 반환한다. 또한, 파일의 크기를 알아내기 위해서는 os.path의 getsize 메서드를 이용하면 된다. 2. Practice from filecmp import cmp print(cmp('sampleimage_1.jpg','sampleimage_1.jpg')) print(cmp('sampleimage_1.jpg','sampleimage_2.jpg'))
파이썬에서 파일의 동일성을 검사하는 간단한 방법 + 파일의 크기1. Introduction 파이썬으로 이미지 관련 코딩을 하다보면, 두 이미지가 같은지 검사해야 할 일이 생긴다. 직접 짜야한다면, 크기를 비교하던가, 각 픽셀값으로 머클트리를 만들던가 하겠지만 파이썬에서는 간편한 메서드를 지원한다. filecmp 라이브러리의 cmp 메서드는 두 파일간의 동일성을 반환한다. 또한, 파일의 크기를 알아내기 위해서는 os.path의 getsize 메서드를 이용하면 된다. 2. Practice from filecmp import cmp print(cmp('sampleimage_1.jpg','sampleimage_1.jpg')) print(cmp('sampleimage_1.jpg','sampleimage_2.jpg'))
2020.08.12 -
1. Introduction 파이썬을 주로 쓰는 사람은 알겠지만 파이썬은 대표적인 타입리스 언어이다. 따라서 변수에 숫자가 몇 자리든 그냥 대입하면 대입하는 대로 초기화된다. 하지만 파이썬에도 엄연히 암묵적으로 변수의 타입을 정해두고 있다. 그 중에는 코더에게 친숙한 int가 있다. 그럼 여기서 의문이 생긴다. c나 자바같은 언어에서는 int의 범위가 4바이트로 제한되어 있다. 파이썬도 암묵적으로라도 타입이 있다면 오버플로우가 나지 않을까? 2. practice 파이썬3를 기준으로 정수의 최댓값은 sys의 maxsize로 알아낼 수 있다. 또한 type메서드는 암묵적인 변수의 타입을 알아낼 수 있는 메서드이다. a = int(sys.maxsize) print(a, type(a)) a += 1 print(..
파이썬에서 int로 캐스팅한 변수는 오버플로우가 날까?1. Introduction 파이썬을 주로 쓰는 사람은 알겠지만 파이썬은 대표적인 타입리스 언어이다. 따라서 변수에 숫자가 몇 자리든 그냥 대입하면 대입하는 대로 초기화된다. 하지만 파이썬에도 엄연히 암묵적으로 변수의 타입을 정해두고 있다. 그 중에는 코더에게 친숙한 int가 있다. 그럼 여기서 의문이 생긴다. c나 자바같은 언어에서는 int의 범위가 4바이트로 제한되어 있다. 파이썬도 암묵적으로라도 타입이 있다면 오버플로우가 나지 않을까? 2. practice 파이썬3를 기준으로 정수의 최댓값은 sys의 maxsize로 알아낼 수 있다. 또한 type메서드는 암묵적인 변수의 타입을 알아낼 수 있는 메서드이다. a = int(sys.maxsize) print(a, type(a)) a += 1 print(..
2020.08.11 -
1. Introduction 파이썬 코드를 보다보면 함수의 인수로 *, **가 있는 것을 볼 수 있다. 이것들은 이 메서드에 인수를 몇개를 보낼지 모르겠을 때 쓰는 것이다. 메서드에 일단 인수를 갖다 박으면, *는 튜플로 **는 딕셔너리의 형식으로 묶어서 전달한다. 2. Practice def star(*a): print(a) def double_star(**b): print(b) star(1, 2, 3) double_star(a=1, b=2, c=3)
*(star), **(double star) 파라메터는 뭐하는데 쓰는 걸까?1. Introduction 파이썬 코드를 보다보면 함수의 인수로 *, **가 있는 것을 볼 수 있다. 이것들은 이 메서드에 인수를 몇개를 보낼지 모르겠을 때 쓰는 것이다. 메서드에 일단 인수를 갖다 박으면, *는 튜플로 **는 딕셔너리의 형식으로 묶어서 전달한다. 2. Practice def star(*a): print(a) def double_star(**b): print(b) star(1, 2, 3) double_star(a=1, b=2, c=3)
2020.08.11 -
1. Question 2. Approach 악명 높은 모자 쓴 죄수 문제.... 걍 첨 보자마자, 못 풀겠거니 하고 편하게 봤다. 이 문제가 한술 더 뜨는게, 이젠 아에 전에 사람이 한 대답을 알 방법이 없다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그리고 문제에는 안나와 있지만 죄수들이 대답을 하는 순서도 교도관이 정해주기 때문에 나가는 순서로 꼼수를 부릴 수 없다고 한다ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 당연히 내가 풀 수는 없었고 답을 보기로 했다. 수학 올림피아드에서 수상 경력있는 천재분이 답을 맞추셨다. 답을 봐도 모르겠다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 하지만 역시 수학 천재, 왜 이게 답이 되는지 말씀해 주신다. 그래도 이해 안 됨ㅋㅋㅋㅋㅋㅋㅋㅋ 풀이는 다음과 같다. 빨주노초파남보 7가지 색을 7에 대한 나머지 0~6에 차례로 대입한다...
[문제적 남자] 빨주노초파남보의 모자를 쓴 7명의 죄수의 모자색을 맞춰라1. Question 2. Approach 악명 높은 모자 쓴 죄수 문제.... 걍 첨 보자마자, 못 풀겠거니 하고 편하게 봤다. 이 문제가 한술 더 뜨는게, 이젠 아에 전에 사람이 한 대답을 알 방법이 없다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그리고 문제에는 안나와 있지만 죄수들이 대답을 하는 순서도 교도관이 정해주기 때문에 나가는 순서로 꼼수를 부릴 수 없다고 한다ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 당연히 내가 풀 수는 없었고 답을 보기로 했다. 수학 올림피아드에서 수상 경력있는 천재분이 답을 맞추셨다. 답을 봐도 모르겠다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 하지만 역시 수학 천재, 왜 이게 답이 되는지 말씀해 주신다. 그래도 이해 안 됨ㅋㅋㅋㅋㅋㅋㅋㅋ 풀이는 다음과 같다. 빨주노초파남보 7가지 색을 7에 대한 나머지 0~6에 차례로 대입한다...
2020.08.10 -
1. Introduction 다른 사람의 코드를 보다가 이런 것을 발견했다. def _from_rgb(rgb): """translates an rgb tuple of int to a tkinter friendly color code """ return "#%02x%02x%02x" % rgb rgb 튜플을 tkinter에 맞는 색상 코드로 바꾸는 함수랜다. 2. Analysis c에서 printf 문자열 포맷팅한 사람은 알겠지만 %는 문자열 뒤에 인수로 대체하겠다는 뜻이다. 16진수는 보통 x로 표현하는데 02x는 2자리를 사용할 것이며, 빈자리는 0으로 채우겠다는 의미이다. 맨 앞에 #은 그냥 의례적으로 16진수 색상 코드앞에 붙이는 듯하다. 내가 놀란 것은 튜플안에 개수가 맞기만 하면, 인수들이 문자열..
RGB 색상을 16진수 코드로 변환1. Introduction 다른 사람의 코드를 보다가 이런 것을 발견했다. def _from_rgb(rgb): """translates an rgb tuple of int to a tkinter friendly color code """ return "#%02x%02x%02x" % rgb rgb 튜플을 tkinter에 맞는 색상 코드로 바꾸는 함수랜다. 2. Analysis c에서 printf 문자열 포맷팅한 사람은 알겠지만 %는 문자열 뒤에 인수로 대체하겠다는 뜻이다. 16진수는 보통 x로 표현하는데 02x는 2자리를 사용할 것이며, 빈자리는 0으로 채우겠다는 의미이다. 맨 앞에 #은 그냥 의례적으로 16진수 색상 코드앞에 붙이는 듯하다. 내가 놀란 것은 튜플안에 개수가 맞기만 하면, 인수들이 문자열..
2020.08.10 -
1. Question 2. Approach 비슷한 문제로 1개의 그룹에서 1개 또는 2개 또는 3개의 바둑알을 가져가는 문제가 일반적으로 알려져있다. 그 문제의 변형인데, 이런 식의 문제는 상대에게 가불기를 시전하면 된다. 위의 일반적인 문제는 $3n + 1$개를 남기고 가져가면 되지만, 이 문제는 더 꼬아놔서 여러경우를 찾아가야 한다. 필자가 찾은 규칙은 두 그룹에 1개씩 바둑알을 남기고 가져가는 것이다. 이러면 상대는 어느쪽이든 1개밖에 못가져가고 다음에 내가 가져가면 이길 수 있다. 방송에서도 이 규칙을 찾아서 한알씩 두 무더기 규칙 (한알두무)라고 하더라ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이 규칙을 반대로 풀면 상대방에게 한알두무를 주면 안된다. 따라서, 내가 바둑알을 남겼을 때 모양이 다음과 같으면 안된다. 한..
[문제적 남자] 2개, 3개, 8개로 나뉜 바둑알 가져오기 게임에서 선공이 반드시 이기는 방법은?1. Question 2. Approach 비슷한 문제로 1개의 그룹에서 1개 또는 2개 또는 3개의 바둑알을 가져가는 문제가 일반적으로 알려져있다. 그 문제의 변형인데, 이런 식의 문제는 상대에게 가불기를 시전하면 된다. 위의 일반적인 문제는 $3n + 1$개를 남기고 가져가면 되지만, 이 문제는 더 꼬아놔서 여러경우를 찾아가야 한다. 필자가 찾은 규칙은 두 그룹에 1개씩 바둑알을 남기고 가져가는 것이다. 이러면 상대는 어느쪽이든 1개밖에 못가져가고 다음에 내가 가져가면 이길 수 있다. 방송에서도 이 규칙을 찾아서 한알씩 두 무더기 규칙 (한알두무)라고 하더라ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이 규칙을 반대로 풀면 상대방에게 한알두무를 주면 안된다. 따라서, 내가 바둑알을 남겼을 때 모양이 다음과 같으면 안된다. 한..
2020.08.10 -
1. Question 돈을 더 놓지 않고 이미지의 100원만 움직여서 가로, 세로가 모두 700원이 되게하라. 2. Approach 옛날부터 유명한 고전 창의력 퀴즈. 답은 상하좌우 끝에 100씩 총 400원을 중앙에 100원 위에 쌓는것.
돈을 더 놓지 않고 가로, 세로 700원을 만들어라1. Question 돈을 더 놓지 않고 이미지의 100원만 움직여서 가로, 세로가 모두 700원이 되게하라. 2. Approach 옛날부터 유명한 고전 창의력 퀴즈. 답은 상하좌우 끝에 100씩 총 400원을 중앙에 100원 위에 쌓는것.
2020.08.10