본문 바로가기

전체 글

오일러 프로젝트 11번 (Julia) 20x20 행렬에서 4개씩 가로, 세로, 대각선 방향으로 연속한 숫자들의 곱을 계산하여 그 중 최대값을 찾는다. 파이썬의 경우, 긴 1차원 배열로 취급하여 특정 좌표에서 가로, 세로, 대각선에 위치한 원소를 추출하는 방식으로 계산했으나, 줄리아는 20x20 행렬로 보고, 부분행렬의 가능한 모든 곱을 찾는 방법을 사용해본다. (이쪽이 훨씬 더 깔끔하다.) 먼저 문자열을 모두 split()한 다음 정수로 변환한다. 400개짜리 배열이 만들어질 것이다. 문자열을 정수나 실수등 다른 값 타입으로 변환할 때에는 parse()를 사용한다. 예를 들어 정수를 표현한 문자열을 정수로 변환하려면 다음과 같이 한다. v = "123" i = parse(Integer, v) 람다식을 사용해서 맵핑할 수 있는데, .|> 을 .. 더보기
Julia의 함수 Julia에서 함수는 인자와 결과값 사이의 맵핑으로 이해된다. readline() 같이 인자를 주지 않고 호출하는 함수가 있긴 하지만, 이 함수들은 기본 인자를 가지고 있어서 인자를 생략할 수 있을 뿐이다. (물론 인자가 없는 함수를 만들 수 없는 것은 아니다. 권장되지 않는다.) 또, Julia에서는 어떤 객체에 묶여 있는 함수, 다른 OOP언어에서 '메소드'라 부르는 개념을 사용하지 않는다. 모든 함수는 자유함수이다. A.func() 와 같은 함수들이 있긴 하지만 이것은 객체에 바인드된 함수가 아니라 모듈을 반입한 방식에 따라서 이름 공간이 구분되어 있는 함수를 지칭하는 방법일 뿐이다. 참고로 Julia에서 '메소드'는 다른 의미로 사용된다. 인자의 구성이나 타입이 다르다면 같은 이름의 함수를 여러 .. 더보기
해밍코드 해밍코드는 오류를 포함할 수 있는 이진 선형 블록을 보정하는 방법이다. 이와 관련된 코딩 문제를 하나 풀어보도록 하자. 일단 문제는 다음 주소에 있다. www.codewars.com/kata/5ef9ca8b76be6d001d5e1c3e/julia Codewars: Achieve mastery through challenge Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential. www.codewars.com 이 문제를 줄리아로 풀면서 몰랐던 것을 제법 알게 되어 정리해본다. 문제는 기본적으로 아스키문자로 구성된 문자열을 암호화하고 .. 더보기
오일러 프로젝트 10번 (Julia) 이백만 이하 소수의 합 범위가 정해져있는 구간의 소수는 에라토스테네스의 체를 사용하면 가장 빠르게 구할 수 있다. @timev let n = 200_0000 s = vcat([false], trues(n-1)) for i=2:Int(floor(√n + 0.5)) s[i] && (s[2i:i:n] = falses((n - i) ÷ i)) end [i for (i,x)=enumerate(s) if x] |> sum |> println end 수행결과 142913828922 0.061972 seconds (88.16 k allocations: 9.983 MiB) elapsed time (ns): 61972000 bytes allocated: 10467893 pool allocs: 88105 non-pool G.. 더보기
기본적인 대표값들에 대해 - 평균, 중간값, 최빈값 어떤 데이터 집합의 특성을 하나의 값으로 표현하려할 때 사용하는 값을 대표값이라 합니다. 우리가 일상적으로 사용하는 대표값으로는 평균이 있습니다. 3학년 1반 학생들의 키를 하나의 값으로 대신해서 표현할 때 보통 평균값을 씁니다. "3학년 1반의 학생들은 키가 평균 164cm이고 2반 학생들은 평균 165cm이니, 2반 학생들이 대체로 키가 더 크다고 할 수 있다."와 같은 식이죠. 언뜻 생각하기에 평균은 이렇게 어떤 집합에 대해 사용할 수 있는 가장 멋진 대표값처럼 생각되기 때문에 다른 대표값이 뭐가 필요할까 싶은 생각도 들 수 있습니다. 하지만 데이터의 특성이나 상황에 따라서 다른 대표값이 더 어울리는 경우도 있기 때문에 이들에 대해서 알아보겠습니다. 먼저 가장 익숙한 평균입니다. 평균은 모든 데이터.. 더보기
오일러 프로젝트 9번 (Julia) 문제 세 자연수 a, b, c 가 피타고라스 정리 a^2 + b^2 = c^2을 만족하면 피타고라스 수라고 부릅니다.(여기서 \(a < b < c\) ) 예를 들면 \(3^2 + 4^2 = 9 + 16 = 25 = 5^2\)이므로 3,4,5는 피타고라스 수입니다. a + b + c = 1000 인 피타고라스 수 a, b, c는 한가지 뿐입니다. 이 때, a, b, c는 얼마입니까? 풀이 a < b < c 인 조건을 사용해서 a, b의 범위를 줄이면 간단하게 풀 수 있다. (뿐만 아니라 삼각형의 세 변의 조건을 추가로 적용할 수 있지만 이 문제에서는 큰 영향을 주지 않는다.) 세 변의 길이의 합이 1000으로 고정되어 있고, b는 c보다 작거나 같아야 하고 a는 다시 b보다 작거나 같아야 한다. 즉 a를 .. 더보기
오일러 프로젝트 8번 (Julia) 문제 다음은 연속된 1000자리 숫자입니다. (읽기좋게 50자리씩 잘라놓음)73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866.. 더보기
오일러 프로젝트 7번 문제 소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다. 이 때, 10,001 번째의 소수를 구하세요. 풀이 드디어 소수 판별 함수가 등장할 차례이다. 소수의 목록을 구하는 방법에는 크게 두 가지 가 있는데, 하나는 소수판별함수를 작성하여 루프를 돌거나 리스트를 필터링하는 것이고 다른 하나는 에라토스테네스의 체를 이용하는 것이다. 에라토스테네스의 체는 매우 빠르게 동작할 수는 있지만 범위를 알고 있는 경우에 유용할 수 있다. 소수의 분포에는 현재까지는 알려진 규칙이 없으므로 10,001 번째 소수가 어디쯤에 위치할지를 가늠할 수 없다. 따라서 소수 판별 함수를 통해서 2에서부터 소수를 하나씩 세어보는 수 밖에 없을 것 같다. 관건은 얼마나 빠른 소수 판별 함수를 작성.. 더보기