일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- https
- certbot
- coursera
- 퍼즐게임
- 먹방
- Project Euler
- API
- codility
- FPS
- 게임
- 그래픽노블
- github
- 우분투
- C#
- AWS
- 알고리즘
- django
- 프로젝트오일러
- flask
- lambda
- HTTP
- 스팀
- 중국맛집
- Python
- 워킹데드
- 파이썬
- 인디게임
- pycon
- 블라디보스토크
- 컴퓨터네트워크
- Today
- 151
- Total
- 300,518
목록Python (80)
YUDA't
행렬의 곱셈은, 곱하려는 두 행렬의 어떤 행과 열을 기준으로, 좌측의 행렬은 해당되는 행, 우측의 행렬은 해당되는 열을 순서대로 곱한 값을 더한 값이 들어갑니다. 행렬을 곱하기 위해선 좌측 행렬의 열의 개수와 우측 행렬의 행의 개수가 같아야 합니다. 곱할 수 있는 두 행렬 A,B가 주어질 때, 행렬을 곱한 값을 출력하는 productMatrix 함수를 완성해 보세요. 신기하게도(?) 로직은 맞게 짰는데 처음 0으로 채워진 행렬을 만들어줄 때 잘못 코딩했다. answer = [[0]*col_b]*row_a 을 사용했는데, 이건 행렬이 아니었다.(그냥 row_a 개 복사된 리스트였음) 깊은 복사(deepcopy)에 대해서는 차차 더 알아가도록 하고... 정말 기초적인 알고리즘에서 의외의 것을 배우게 된다.
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 gcdlcm 함수를 완성해 보세요. 배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 gcdlcm(3,12) 가 입력되면, [3, 12]를 반환해주면 됩니다.
BeautifulSoup를 이용해 youtube에서 긁어온 정보를 Flask에 넣어보려고 한다.(BeautifulSoup 크롤링 포스팅) VS에서 Flask 프로젝트는 워낙 기본 샘플이 잘 돼있어서 초보자도 금방 따라할 수 있다. 시작! 1) Flask Web Project를 선택해 새 프로젝트를 하나 만든다. 첫 번째의 'Install into a virtual environment'를 선택해준다. 로컬에서야 그냥 파이썬 패키지를 써도 되지만, 나중에 실제로 웹에 게시할 때엔 가상 환경이 필요하기 때문에 이를 쓴다. 저번에 일을 하다가 Python 2.7한테 엿을 먹은 뒤로는 항상 Python 3.4 버전을 쓴다. 참고로 Python 3.5는 Azure Web 게시가 되지 않고, 아직 Flask에 완전..
* 2019.04.28. 이 글은 2016년에 쓰인 글입니다.현재는 유튜브의 UI 레이아웃이나 태그 등이 모두 바뀌어 이 글을 따라 유튜브를 크롤링할 수 없습니다.혹시 크롤링하는 방법을 찾아 이 글에 들어왔다면 [Python] BeautifulSoup로 웹사이트 크롤링하기 글을 참고하시기 바랍니다. 딱히 유튜브를 크롤링 하는 데에 특별하다고 할 점은 없다. 그냥 유명하고, 유명사이트다 보니 html 태그가 잘 잡혀있어서 크롤링 초보자가 이해하기 좋기 때문이다. 포스팅 전체를 읽기 귀찮다면 그냥 맨 밑의 코드만 봐도 이해는 충분히 될 것이다. 나는 Eminem 공식 페이지에서 영상 링크를 크롤링 할 건데, 에미넴 영상을 크롤링 하는 건 내가 에미넴을 좋아해서이다. 그럼 시작! 1) 일단 VS에서 어떻게, ..
소수점 뒤에 양의 정수를 차례대로 붙여 나가면 아래와 같은 무리수를 만들 수 있습니다. 0.123456789101112131415161718192021... 이 무리수의 소수점 아래 12번째 자리에는 1이 옵니다 (위에서 붉게 표시된 숫자). 소수점 아래 n번째 숫자를 dn이라고 했을 때, 아래 식의 값은 얼마입니까? d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000 꽤나 간단한 문제였는데 푸는 데는 좀 걸렸다. 식 자체는 바로 냈는데 그 식이 3분 넘게 걸린다는 게 문제였지... 처음엔 양의 정수를 뒤에 붙일 때마다 리스트에 추가하고, ''.join() 으로 나열했는데 이게 시간을 어마무지하게 잡아먹었다. 내가 삽질했다는 걸 깨닫고 나서 그냥 str로 계속..
세 변의 길이가 모두 자연수 {a, b, c}인 직각삼각형의 둘레를 p 로 둘 때, p = 120 을 만족하는 직각삼각형은 아래와 같이 세 개가 있습니다. {20, 48, 52}, {24, 45, 51}, {30, 40, 50} 1000 이하의 둘레 p에 대해서, 직각삼각형이 가장 많이 만들어지는 p의 값은 얼마입니까? 피타고라스 정의를 이용하는 문제.일단 수도코드 #1차) 101.58초(왓더...)#2차) 24.49초. a, b for loop를 전부 도는 대신 p/2로 변경#3차) 23.42초. math.ceil() 대신 round를 씀. 다른 것도 math.sqrt()를 써봤는데 안 쓰는 게 더 빠른 듯하다.#4차) 12.57초. 여기서부터는 로직이 아니라 수학(이걸 수학이라 부를 수 있다면.)이 ..
숫자 192에 1, 2, 3을 각각 곱합니다. 192 × 1 = 192 192 × 2 = 384 192 × 3 = 576 곱한 결과를 모두 이어보면 192384576 이고, 이것은 1 ~ 9 팬디지털(pandigital)인 숫자입니다. 이런 과정을 편의상 '곱해서 이어붙이기'라고 부르기로 합니다. 같은 식으로 9와 (1, 2, 3, 4, 5)를 곱해서 이어붙이면 918273645 라는 1 ~ 9 팬디지털 숫자를 얻습니다. 어떤 정수와 (1, 2, ... , n)을 곱해서 이어붙였을 때 얻을 수 있는 가장 큰 아홉자리의 1 ~ 9 팬디지털 숫자는 무엇입니까? (단 n > 1) 이 문제를 풀려고 미뤄뒀던 32번 팬디지털 문제를 풀었다. 예전에는 끙끙거리면서 결국 못 풀었는데 요즘 그래도 늘고 있는지 둘 다 ..
1. 선형탐색(Linear Search Algorithm / Sequential Search Algorithm) - 리스트에서 특정한 값을 찾는 알고리즘의 하나. 리스트에서 찾고자 하는 값을 맨 앞에서부터 끝까지 차례대로 찾아 나간다. - 검색할 리스트의 길이가 길면 비효율적이지만, 검색방법 중 가장 단순하여 구현이 쉽고, 정렬되지 않은 리스트에서도 사용할 수 있다. - 예를 들어, 알파벳_list라는 리스트가 있다고 치자. 1알파벳_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']cs 이렇게 10개의 알파벳 string을 가지고 있다. 이 경우 우리가 하나의 알파벳을 뽑아낸다고 할 때, 최고의 경우(best case)는, 'a'를 뽑아낼 때이다. 뽑..
1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다. 예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다. 7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다. 이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까? (참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다) 오늘 건...좀 멍청하게 짰다. 수도코드도 짜지 않았고... 풀기 귀찮아서 계속 미루다가 38번이 팬디지털을 응용하는 문제여서 풀었다. 좀더 예쁘게 짤 수 있을 것 같은데... 팬디지털..
소수 3797에는 왼쪽부터 자리수를 하나씩 없애거나 (3797, 797, 97, 7) 오른쪽부터 없애도 (3797, 379, 37, 3) 모두 소수가 되는 성질이 있습니다.이런 성질을 가진 소수는 단 11개만이 존재합니다. 이것을 모두 찾아서 합을 구하세요.(참고: 2, 3, 5, 7은 제외합니다) 이번엔 문제가 간단해 보여서 수도 코드를 짜지 않았다.소수가 나왔으므로 역시나 primesieve 모듈을 사용했다.처음엔 아래 적어놓은 조건대로 for loop를 돌릴까 했으나, primesieve가 훨씬 편해서... 아래는 테스트코드
대칭수(palindrome)인 585는 2진수로 나타내도 10010010012가 되어 여전히 대칭수입니다. 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합을 구하세요. (주의: 첫번째 자리가 0이면 대칭수가 아님) 이번 거는 긴 버전, 짧은 버전 두 개로 만들어 봤다. python에 2진수를 구하는 함수 bin()이 있어서 정말 편하게 짰다! 아래는 먼저 짠 수도 코드. 이번엔 완벽히 수도 코드대로 짜서 기분 좋다. 짜고 나서 굉장히 뿌듯했던ㅎㅎ 긴 버전은 함수명만 보고도 어떤 과정을 거치는지 자세히 알 수 있도록 짰다. 짧은 버전은 말그대로 짧게! 아래는 매번 짜고 있는 테스트 함수다. 물론 알고리즘이 간단한 코드로 끝날 때에는 좀 번거롭기도 하지만 함수가 세 개 이상으로 늘어날 ..
소수 중에서 각 자리의 숫자들을 순환시켜도 여전히 소수인 것을 circular prime이라고 합니다. 예를 들어 197은 971, 719가 모두 소수이므로 여기에 해당합니다.이런 소수는 100 밑으로 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97 처럼 13개가 있습니다. 그러면 1,000,000 밑으로는 모두 몇 개나 있을까요? 3.8초 정도가 걸렸다.이번 문제도 꽤나 재밌었다.처음엔 순환이 아니라, 순열로 착각해서 itertools 모듈의 permutations 함수를 썼었다.삽질 잠깐 하다가, deque로 만들어 그 길이만큼 rotate() 시켰다.(deque는 처음 써봤다!) 신기하게도(?) primesieve 모듈에 소수 판별 함수가 없어서, 해당 num을 ..