codility
[Codility] CountDiv
2017.11.140. 문제세 개의 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. 결과
[Codility] PermCheck
2017.11.090. 문제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))
[Codility] CyclicRotation
2017.11.040. 질문 인자 값으로 리스트 A와 상수 K를 받는다. 리스트 A의 값들은 K만큼 오른쪽으로 이동하며 리턴값은 전부 이동하고 난 뒤의 A이다. 1. 답변 def solution(A, K): if A: if len(A)
[Codility] OddOccurrencesInArray
2017.11.020. 문제 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..
[Codility] BinaryGap
2017.11.010. 코딩 소모임에서 코딜리티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..