Home » 스터디

스터디

Julia 정규식 다루기

Julia에서 정규식은 별도의 모듈을 반입하지 않고 사용할 수 있으며, 패턴 자체는 Base.RegExp 타입으로 표현된다. 정규식 패턴을 만들 때에는 r"..." 형태의 리터럴로 바로 정의할 수 있다. (대신, raw string문자열은 raw"..."이다.) 한번 생성한 Regexp 값은 .pattern 필드로 그 패턴을 다시 확인할 수 있다. 참고로 r" .... " 리터럴은 정규식 패턴을 좀 더 손쉽게 사용할 수 있게 하기 위해 백슬래시를 이스케이프해준다. 따라서 \d 등과 같은 이스케이프 문자 시퀀스에서 백슬래시는 두 번이 아니라 한 번만 쓰면 된다. (r"\d+")

더 보기 »Julia 정규식 다루기

IO모나드와 부수효과

하스켈에서 문자열을 화면에 출력해주는 putStrLn 함수를 생각해봅니다. 이 함수의 타입은 String -> IO ()로 문자열을 인자로 받고 빈 모나드를 리턴합니다. 무언가를 출력하는 일을 수행하니, 반환할 값에는 의미가 없다는 뜻입니다. 반환하는 값이 비어있으니, IO 액션의 연쇄에 있어서는 어떤 종착점이 될 수 있다고 봐도 됩니다. 말하자면 이 액션의 이후에는 어떤 처리를 하는 것이 의미가 없는 셈이죠. 실제로 하스켈 프로그램의 진입점이 되는 main 함수 역시 타입이 IO () 여서, main 함수의 실행이 종료되면 프로그램이 끝나게 됩니다. 통상적인 프로그래밍 경험에 비추어볼 때 우리는 표준입력을… 더 보기 »IO모나드와 부수효과

선형대수를 사용해서 연립방정식 풀기

연립방정식을 손으로 푸는 방법으로는 학교에서 소거법이나 대입법 같은 테크닉을 배운다. 하지만 간단한 1차 연립 방정식을 다른 방법을 사용해서도 풀 수 있는데, 이 다른 방법이라는 것이 손으로 풀기에는 더욱 귀찮지만 컴퓨터에 적용할 수 있다는 장점이 있어서 소개한다. 한개에 600원하는 귤과 한 개에 1000원하는 사과를 모두 12개를 사고, 8800원을 지불하였다. 귤과 사과는 몇 개씩 샀는지 구하라. 이 문제에는 귤과 사과의 개수를 더해서 12, 구매 금액을 모두 더해서 8800원이라는 두 개의 조건이 등장한다. 이 두 조건을 식으로 쓰면 다음과 같을 것이다. 600 *… 더 보기 »선형대수를 사용해서 연립방정식 풀기

Julia 문자열 다루기

Julia에서 문자열은 String 타입으로 정의되어 있으며, 내부적으로 UTF8로 인코딩되는 유니코드 문자열을 지원한다. 문자열은 일련의 유니코드 문자들로 구성되며 불변한 값이다. Julia에서는 String 외에 단일 문자를 표현하는 Char 타입이 존재하며, 리터럴 문법 역시 문자열과 문자가 구분된다. (문자열은 겹따옴표, 단일 문자는 홑따옴표를 사용한다.) 기본 리터럴 문법 "string"과 같이 겹따옴표를 사용한다. 여러 줄에 걸쳐지는 문자열은 """…"""로 둘러쌀 수 있다. 파이썬도 이런 3중 따옴표를 사용하는데, 줄리아가 파이썬과 다른 점은 멀티라인 문자열을 쓸 때 들여쓰기가 생기더라도 닫는 따옴표도 들여쓰기 되어 있다면 그 들여쓰기를 무시한다는 점이다. 글자… 더 보기 »Julia 문자열 다루기

중심극한정리

통계적 추정은 표본으로부터 모수를 추정하는 것을 말한다고 했다. 그런데, 통계량은 표본을 추출할 때마다 달라지는데, 어떻게 매번 변하는 통계량을 가지고 모수를 추정할 수 있을까? 통계적 추정은 중심극한정리라는 원리를 근본으로 작동한다. 오늘은 중심 극한 정리가 무엇이며, 통계적 추정에서 어떤 의미를 갖는지 살펴보자. 먼저 확률 변수에 대해 알아보자. 확률 변수(Random Variable)은 프로그래밍할 때 그 변수(값을 저장해놓는다)의 개념과는 좀 다른 것으로, 말 그대로 변하는 값들을 말한다. 즉, 무작위 실험을 했을 때 특정 확률로 발생하는 각각의 결과를 말한다. 이 때 확률 변수는 확률에 대한 변수가… 더 보기 »중심극한정리

오일러 프로젝트 87번

어떤 소수의 제곱, 세제곱, 네제곱의 합으로 표현할 수 있는 수를 찾는 문제. 소수의 제곱 + 소수의 3제곱 + 소수의 4제곱)으로 나타낼 수 있는 가장 작은 수는 28입니다. 28 = 22 + 23 + 2433 = 32 + 23 + 2449 = 52 + 23 + 2447 = 22 + 33 + 24 50 미만에 이런 수는 모두 네 개 있습니다. 5천만 미만에 이렇게 나타낼 수 있는 수는 모두 몇 개나 됩니까? 보다 영리하게 푸는 방법은 여전히 모르겠고, 현재로서는 brute-force로 푸는… 더 보기 »오일러 프로젝트 87번

오일러 프로젝트 85

균일한 격자 내에서 만들 수 있는 직사각형의 개수에 관한 문제이다. 눈금의 크기가 1인 격자에서 가로, 세로를 정했을 때 그 속에서 만들 수 있는 직사각형의 개수가 2백만개에 가장 근접할 때의 가로/세로를 구하는 것이다. 격자의 가로 크기를 x, 세로 크기를 y라 했을 때 그 내부에 존재하는 직사각형들의 가로 크기는 1, 2, 3, … x 이고 세로 크기도 1, 2, 3, … y 가 된다. 가로가 a 일 때 이 폭으로 x 에 들어갈 수 이는 경우는 (x + 1 – a) 개… 더 보기 »오일러 프로젝트 85

matplotlib의 기본 사용법 및 다른 시각화 라이브러리

오늘은 파이썬의 시각화 부분에서 가장 널리 쓰이고 있는 matplotlib에 대해서 알아보도록 하자.

matplotlib을 사용할 때 주로 서브패키지인 pyplot을 사용한다. pyplot은 MATLAB의 인터페이스와 유사하게 작동할 수 있도록 하여 MATLAB을 사용하는 사용자층이 쉽게 matplotlib으로 옮겨오도록 하고 있다. 문제는 MATLAB의 인터페이스가 그모양이어서 그런지 모르겠는데, matplotlib의 인터페이스가 일관성도 없는 편이고 그다지 객체지향적이지도 않아서 사실상 API 문서만으로도 사용이 어렵고 관련 예제를 보면서 코드를 따라써야 하는 수준으로 처리해야 하는 경우가 많다는 것이다.

더 보기 »matplotlib의 기본 사용법 및 다른 시각화 라이브러리

파이썬으로 이진 탐색 구현하기

이진 탐색(binary search)은 정렬된 데이터에서 특정한 값을 아주 빠르게 찾는 방법이다. N개의 데이터 중에서 특정한 값 x를 찾을 때, 최악의 경우 N번의 비교가 필요한데, 이진 탐색의 경우 최대 log_{2}N만큼의 비교를 하게 된다. 즉 자료의 크기가 클수록 선형 탐색에 비해 성능이 매우 우수해진다. 다만 이진 탐색은 자료가 정렬되어 있다는 전제가 필요하다. (이 때문에 컴퓨터 과학에서는 정렬이 매우 중요하고, 성능이 좋은 정렬 알고리듬을 만들기 위해 많은 노력이 있어왔다.)

더 보기 »파이썬으로 이진 탐색 구현하기