일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- enumerate
- datetime
- 딕셔너리
- FOREIGN KEY
- 자료구조
- flask
- Dictionary
- 네이밍
- project euler
- python
- SUM
- 2557
- convention
- BOJ
- 파이썬
- floor
- ceil
- lower_case_table_names
- 소수
- 리스트 컴프리헨션
- list comprehension
- SUM()
- 외래키
- 에라토스테네스의 체
- Codeforces
- itertools
- 큰 수 나누기
- 세그먼트 트리
- timestamp
- mysql
- Today
- Total
목록분류 전체보기 (465)
늒네 기록
문제 링크: http://codeforces.com/contest/1408/problem/B 음이 아닌 정수로 이루어진, 감소하지 않는 순서로 정렬된 리스트 a_1, a_2, ..., a_n이 주어져있을 때, 크기 n짜리 리스트 m개를 만들어서 각 리스트의 i번째 아이템을 다 더해서 a_i가 되도록 만들고자 한다. 이때, m개의 리스트들 각각은, 최대 k개의 서로 다른 원소로 이루어질 수 있다. 예를 들어, n = 5, k = 3, a = [1, 2, 3, 4, 5]로 주어져있다고 하자. a는 [1, 2, 0, 0, 0], [0, 0, 3, 4, 0], [0, 0, 0, 0, 5]의 3개의 리스트들을 같은 위치에 있는 원소들끼리 더해서 만들 수 있다. [1, 2, 0, 0, 0], [0, 0, 3, 4,..
숫자로 이루어진 리스트 x가 있을때, x에 있는 모든 숫자의 합은 sum(x)로 쉽게 구할 수 있다. 그렇다면 x에 있는 모든 숫자의 곱을 구하는 함수는 바로 없을까? 이런 생각을 하고 구글링을 해보다가 처음 lambda, reduce함수를 활용하는 방법을 알게 된 분들이 많을 거라고 생각한다. 처음 검색을 하다 보면 이런 코드를 맞닥뜨리게 된다. 1 2 3 from functools import reduce l = [1, 3, 5, 7] print(reduce(lambda x, y: x*y, l)) cs 매우 짧은 코드로, 출력된 결과를 보면 105로 원하는 답이 나왔다는 걸 알 수 있다. 그런데 도대체 여기서 무슨 일이 일어난 걸까? 이를 알기 위해서는 파이썬의 lambda와 reduce에 대해서 각..
코드를 짜다 보면 종종 주어진 선택지들 중에 몇 개를 선택해서 조합을 만들고, 그 조합들을 가지고 계산을 돌려야 할 일이 있을 때가 있다. 예를 들어, A, B, C, D 선택지가 있을때, 이 중에서 i) 중복을 허용하여 두 개를 순서대로 뽑아서 나열한다 -> AA, AB, AC, AD, BA, BB, BC, BD, CA, CB, CC, CD, DA, DB, DC, DD ii) 중복을 허용하지 않고 두 개를 순서대로 뽑아서 나열한다 ->AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC iii) 중복을 허용하지 않고 두 개를 뽑는다. 순서가 달라도 조합이 같으면 같은 걸로. ->AB, AC, AD, BC, BD, CD 이때 위의 i), ii), iii) 상황에서 각각 파이..
아주 단순하게 생각하면, 어떤 계산을 하고 싶은데, 그게 텍스트로 되어있는 경우에 딱 활용할만한 함수라고 생각하면 된다. 예를 들어, a@b@c@d 값을 구하고 싶은데, 이때 @칸에 +, -, *, /의 조합이 자유롭게 들어올 수 있다고 해보자. 그렇다면 @칸에 연산자를 집어넣은 뒤 결과를 어떻게 계산할 수 있을까? 1 2 x = eval('1+2/3*4') print(x) # 3.6666666666666665 cs 이런 상황에서 eval을 쓰면 바로 계산해준다! 검색해보면 eval함수 외에도 exec(), compile()함수가 있고, 다른 argument를 넣을 수도 있으며, 해당 함수를 사용하는 데에 장단점이 있는것 같지만, 이 글에서는 이런 함수가 존재한다는 사실만 적어두고 디테일한 내용은 추후 ..
프로젝트 오일러 97번은 앞에선 열심히 메르센 소수에 대한 설명을 하고, 그 다음엔 넌-메르센 소수 이야기를 하더니, 마지막에 가서는 '앞에 주어진 수의 마지막 10자리 수를 구하시오'라고 하는, 조금 김빠지는 문제다. 이 문제에서 계산해야 하는 수는 28433×2^7830457+1로, 2^7830457를 어떻게 빠르게 계산해내는지가 관건이다. 해당 숫자는 계속 계산하기엔 큰 숫자가 될 것이고, 어차피 우리에게 필요한 숫자는 마지막 10자리 수이며, 그렇기 때문에 계산을 하다가 11자리수가 넘어가면 마지막 10자리 숫자만 잘라서 계속 계산을 이어나가는 방법을 활용할 것이다. 그런데 그렇다고 해도 2^7830457의 마지막 10자리 수를 빨리 계산해내야 하는 문제가 남는다. 문제에 나이브하게 접근하면 이렇..
간단한 웹서버를 만들어보기 위해서 몇 가지 대안들을 보던 중 flask가 눈에 들어와서 한 번 시도해보기로 했다. flask의 helloworld 같은 예제들부터 따라서 만들어보는 것이 좋을것 같아 찾아보니 한국어로 된 도움말 documentation이 준비되어 있었고, 특히 빠르게 시작하기에 있는 내용을 그대로 따라해보면 기초적인 서버를 만드는 것부터 시작할 수 있어서 좋았다. 빠르게 시작하기 링크의 앞부분에 flask를 설치하지 않았으면 설치하는 것부터 시작하라며 다른 페이지 링크를 걸어주는데, 해당 링크에는 virtualenv를 활용하는 방법도 같이 자세히 설명되어 있다. 해당 내용에 관심 있는 개발자라면 같이 보는 것도 좋지만, 굳이 따라하지 않아도 작동에는 큰 문제가 없으니 아래와 같이 로컬에 ..
프로젝트 오일러 21번 문제에서 말하는 amicable numbers란, 다음 조건을 만족해야 한다. - d(x)란 x의 진약수(proper divisor, x를 제외한 x의 양의 약수)들의 합 - x != y 이고, d(x)==y, d(y)==x이면 x, y 둘 다 amicable number 이 문제는 10000보다 작은 amicable number들의 합을 구하는 것이 목표다. 이를 위해서 문제를 아래의 과정들로 쪼개겠다. - 10000보다 작은 양의 정수들을 소인수분해한 결과를 담아놓는 list를 만들고, - 각 양의 정수마다 d(x)를 계산하는 함수를 만들어서 이 값을 담아놓는 list를 만들고, - x를 정해서 y=d(x), z=d(y)를 만족하면서 x != d(x)를 만족하는 x들을 찾아 더..
파이썬에서 리스트 안에 있는 값들로 작업을 할때 다음과 같은 두 가지 접근 방법이 있을 것이다. 1 2 3 4 5 6 7 8 9 10 l = ['x', 'y', 'z'] # list에 인덱스로 접근 for i in range(len(l)): print(l[i]) # list 아이템에 직접 접근 for s in l: print(s) cs 하나는 인덱스로 접근하는 방법, 하나는 아이템에 직접 접근하는 방법. 첫 번째 방법은 내가 몇 번째 인덱스 가지고 작업하고 있는지를 기준으로 생각하기 쉬운 반면, 리스트가 들고있는 아이템 자체로 코드를 짠다는 생각을 하기 어렵다. 예를 들어, 아래와 같은 코드가 있다고 하면, 1 2 3 4 5 6 7 8 9 10 group = ['John', 'Kay', 'Sam'] # ..
평소에 제일 많이 접하게 되는 sum() 함수 사용법은 다음과 같을 것이다. l = [1, 2, 3, 4] print(sum(l)) # 10 이때 sum의 역할은 리스트 l 안에 있는 정수들을 전부 더해준다. 그런데, sum에 두번째 인자를 넣을 수 있다. 두 번째 인자는 최초의 변수 역할을 해주는데, 아래의 코드를 보면 좀 더 명확하게 이해할 수 있다. x = 5 l = [1, 2, 3, 4] for num in l: x+=num print(x) # 15 y = 5 print(sum(l, y)) # 15 print(y) # 5 sum()함수가 주어진 이터레이터에 있는 값들을 모두 더해주는 거라면, +가 정의된 다른 타입들도 넣을 수 있는 것이 아닐까 의문을 가질 수 있다. 예를 들어, 1) string..
백준 16785번은 solved.ac 가서 브론즈 IV 문제들 중에 눈에 띄는 거 아무거나 클릭했다가 걸린 문제다. 문제가 일본어로 되어있어서 당황했으나, 번역기 돌려보니 설명 자체는 간단. - 출첵하면 A만큼 점수를 준다. - 연속 7일 출첵하면 B만큼의 보너스 점수를 준다. 그리고 연속 출첵 카운터가 0일로 리셋. - C점 이상이 되기 위해서는 연속 며칠 동안 출석해야 하는가? 그리고 인풋으로 A B C 가 주어진다. 7일 연속 출첵하면 받을 수 있는 점수가 7*A+B점이므로, C안에 7*A+B를 몇 번 집어넣을 수 있는지 체크하고 --(1), 7*A+B를 계속 빼고 남은 나머지 점수를 며칠 동안 출석하면 채울 수 있는지 찾으면---(2) 문제가 풀린다. D = 7*A+B라고 두면, (1) C를 D로..