일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lambda
- flask
- 알고리즘
- codility
- AWS
- 워킹데드
- 우분투
- Project Euler
- 인디게임
- 중국맛집
- 프로젝트오일러
- 몽골여행
- django
- 게임
- 퍼즐게임
- https
- github
- 그래픽노블
- pycon
- FPS
- Python
- 컴퓨터네트워크
- coursera
- 먹방
- 블라디보스토크
- 스팀
- 파이썬
- API
- certbot
- C#
- Today
- 134
- Total
- 324,498
목록Python (80)
YUDA't
이라는 책에서 1장 '파이썬다운 생각'을 요약해봤다.참고로 python3 기준이다. 사용 중인 파이썬의 버전을 알자요즘은 대부분 python3을 사용하니 이 부분은 넘어가도 될 듯하다.새로운 프로젝트를 시작한다면 python3을 사용할 것을 권장한다. PEP 8 스타일의 가이드를 따르자파이썬 개선 제안서(Python Enhancement Proposal) #8, 다른 말로 PEP 8은 파이썬 코드를 어떻게 구성할지 알려주는 스타일 가이드다.일관성 있는 코드를 짜서 유지보수성과 가독성, 그리고 협업 가능성을 높이자. bytes, str, unicode의 차이점을 알자python3에서 bytes는 8비트 값을 저장하고, str은 유니코드 문자를 저장한다.python2에서 str은 8비트 값을 저장하고, un..
0. 문제세 개의 integer A, B, K 가 있다. A와 B 사이에 있는 integer 중 K로 나누어 떨어질 수 있는 수의 개수를 구하여라. 1. 답변 문제는 쉬웠는데 예외 사항을 체크하지 못해 여러 번 돌려야 했다. A나 B가 0일 경우엔 아무 수로나 나누어 떨어지는데 이걸 그냥 넘어감 A가 K 이상일 경우, B가 K 이상일 경우를 나눠 몫을 구하고, A가 0일 경우엔 결과값에 1을 더했다. def solution(A, B, K): result = 0 if A >= K: result = B // K - (A-1) // K elif B >= K: result = B // K if A == 0: result += 1 return result 2. 결과
0. 문제 N개의 상수로 이루어진 리스트 A가 있다. 이때 A 안에 '없는' 가장 '작은' 자연수(0보다 큰)를 리턴한다. 1. 답변 def solution(A): if max(A) 0])) for idx, val in enumerate(sorted_a, 1): if idx != val: return idx return sorted_a[-1]+1 음 쉬웠음 시간복잡도 O(N) 혹은 O(N * log(N))
0. 문제N개의 상수로 이루어진, 비어있지 않은 리스트 A가 있다. A 순열(permutation)은 1부터 N 까지의 중복되지 않는 숫자의 연속이다. 주어지는 리스트 A가 순열인지 판별하라. 1. 답변 이번 것도 난이도가 매우 낮았다. def solution(A): sorted_a = sorted(set(A)) if len(sorted_a) == len(A) and sorted_a[-1] == len(A): return 1 else: return 0 시간복잡도는 O(N) or O(N*log(N))
0. 문제작은 개구리 하나가 X에서 Y(혹은 그보다 더 멀리)로 이동하고 싶어한다. 개구리는 매 점프마다 D만큼 이동한다. 개구리가 원하는 위치에 도달할 때까지 필요한 최소 점프 횟수를 구하라. 1. 답변 Codility에서 print()가 된다고 python3를 지원한다고 생각했던 게 오산이었다. 문제를 읽고 왜 이렇게 쉽지 하고 1-2분 만에 풀었는데, 정답률 44%.. python2와 python3의 round() 함수가 다른 값을 내놓는 다는 걸 처음 알았다.(python2를 쓴 적이 거의 없으니..) 처음 짰던 코드는 이렇다. def solution(X, Y, D): return int(round((Y - X) / D + 0.5)) 깨달음(?)을 얻고 난 뒤의 코드. 시간복잡도 O(1)def s..
0. 문제 비어있지 않은 리스트 A에 N개의 숫자가 있다.(N은 2와 100,000 사이의 숫자) 그리고 0 < P < N 의 조건을 가지는 자연수 P가 있다. 자연수 P에 의해 리스트 A는 이렇게 둘로 나눠지게 된다. A[0], A[1], ..., A[P − 1] A[P], A[P + 1], ..., A[N − 1] 이때 |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])| 의 가장 작은 값을 구하라. 1. 답변 처음에 답변은 다 맞췄으나 TimeoutError가 났다. for p in range(1, len(A)): diff = abs(sum(A[:p]) - sum(A[p:])) 위와 같이 간지나게 풀었는데... 루프를 돌 때마다..
0. 문제 주어진 리스트 A는 N개의 서로 다른 숫자로 이루어져 있다. 그리고 이 리스트에는 [1..(N + 1)] 이렇게 1부터 N+1까지의 숫자가 무작위로 섞여있는데 항상 하나의 숫자가 빠져있다. 이 빠진 숫자를 구하시오. 1. 답변 주의할 점은... - 리스트 아이템이 하나일 경우 - 첫 번째(1) 혹은 마지막(N+1)이 빠졌을 경우 이걸 감을 못잡아서 계속 고쳤다... def solution(A): if A: sorted_A = sorted(A) for idx, n in enumerate(sorted_A, 1): if idx != n: return idx return sorted_A[-1]+1 else: return 1 enumerate() 는 내장함수인데 실제 업무에서도 굉장히 유용하게 쓰고 있다.
0. 질문 인자 값으로 리스트 A와 상수 K를 받는다. 리스트 A의 값들은 K만큼 오른쪽으로 이동하며 리턴값은 전부 이동하고 난 뒤의 A이다. 1. 답변 def solution(A, K): if A: if len(A)
0. 문제 1개 이상의 숫자가 들어있는 리스트 A가 주어진다. 여기 리스트 A에서는 모든 아이템들이 2개, 혹은 4개, 6개 이렇게 짝수 개의 짝을 이루고 있다. 딱 하나만 빼고. 예를 들자면 이렇다.A = [1, 9, 6, 3, 3, 1, 7, 6, 9]여기서 짝이 없는 하나의 숫자를 찾아 리턴해야 한다. 1. 답변 꽤 빠르게 짰는데, 처음엔 리스트 A를 set으로 중복 제거하고, 이 set을 for loop로 돌려 A.count(num) 이런 식으로 리스트 A 내의 숫자를 카운트하게 했는데... 너무 느려서 performance에서 점수 깎임. 검색해보니 sorted(리스트) 이 함수가 정말 빠르다고 해서 사용했다. 아이템이 짝수이거나 리스트의 길이가 1인 경우 등의 예외사항을 모두 try/excep..
0. 코딩 소모임에서 코딜리티codility, 해커랭크hackerrank 를 알게되었다. 코딜리티는 여기저기서 들어보긴 했는데 가입해서 문제를 풀어보는 건 처음이었다. 자동 채점 방식을 그닥 좋아하지 않아서 프로젝트 오일러를 좋아했었는데, 이것도 익숙해지면 괜찮을 듯. 1. 문제 binary gap은 1000010001과 같은 2진법 수에서 1과 1사이에 있는 0의 개수이다. 리스트 N이 주어지면 여기에서 가장 긴 binary gap을 찾아야 한다. - 마지막이 1이 아닌 0으로 끝날 경우를 체크해주어야 한다. 이걸 체크 안해서 틀림 2. 답변 def solution(N): bin_str = bin(N).replace('0b', '') bin_gap_list = list(filter(None, bin_s..
나는 비교 대상이 None이 아닌 이상 대체로 ==를 사용하기 때문에 이 둘의 차이점을 깊게 생각해본 적이 없다. 근데 오늘 스택오버플로우를 서핑하다가 이와 관련된 글이 눈에 띄어서 읽어봤는데 재밌었다. is는 reference equality. 메모리 상의 두 object를 비교한다. 두 reference가 같은 object를 가리키는지 확인할 수 있다. ==는 value equality. 값을 비교한다. 두 object가 같은 값을 가지는지 알 수 있다. 예시를 보자. >>> foo = 10 >>> dir(foo) == dir(10) True >>> dir(foo) is dir(10) False 동일한 변수의 dir()을 가져왔음에도 이들은 같은 값을 가질 뿐, 같은 object는 아니기 때문에 is..
print와 return은 모두 function이 아닌 statement다. 뭐 이건 제쳐두고, print와 return의 가장 큰 차이점은 함수 및 프로그램에 영향을 주느냐 마느냐이다. print는, 그저 값을 출력할 뿐, 컴퓨터가 이 값을 가지고 무얼 하진 못한다. 변수가 어떤 값을 가지는지 사용자 측에서 편하게 보기 위함이지 함수에는 전혀 영향을 끼치지 않는다. return은, 함수가 값을 반환하는 가장 주된 방법이다. 모든 함수는 어떠한 값을 return하며, 이 return(혹은 yield)이 명시되어 있지 않은 경우에는 None을 return한다. 이 반환된 값은 다른 함수에서 사용될 수 있으며 변수에 저장될 수도 있다. def function_that_prints(): print("I pri..