문제 https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/ 주어진 배열에 홀수 값들은 각각 한쌍을 이루지만, 하나의 수는 쌍을 이루지 못한다. 즉, 쌍을 이루지 못하는 수를 찾으면 된다. 문제 풀이 미리 정렬해두고, 각각의 값은 쌍을 이루므로 인덱스를 2개씩 확인하면 효율성을 높일 수 있다. 코드 def solution(A): if len(A) == 1: return A[0] A = sorted(A) for i in range(0, len(A), 2): if i + 1 == len(A): return A[i] if A[i] != A[i + 1]: return A[i] 최초에 작성한 코드는 시간 복잡도로 인해 효율성이..
문제 https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/ 주어진 배열을 K의 수만큼 오른쪽으로 shift한 후 변환된 배열을 반환하면 되는 문제이다. 문제 풀이 K가 주어진 배열 보다 클 경우, K 값을 K %= len(A)로 변경하면 K가 크더라도 주어진 배열 크기 만큼 shift한다. 코드 from collections import deque def solution(A, K): length = len(A) if not length or length == K: return A if K > length: K %= length lst = deque(A) lst.rotate(K) return list(lst) deque를 활용하면, ..
문제 https://app.codility.com/programmers/lessons/1-iterations/ 반복문을 사용하여, 이진수에서 1과 다음에 나타나는 1사이의 차가 가장 큰 경우를 찾는 문제이다. 예를 들어, 주어진 수의 이진수가 1001이면 차는 2가 되고, 1000일 경우 0이 된다. 문제 풀이 1이 등장한 이후로 1이 다시 반복될 때까지 카운트하여, 문제를 해결한다. 코드 def solution(N): answer = 0 cnt = 0 binary = format(N, 'b') for num in binary: num = int(num) if not num: cnt += 1 else: if cnt > answer: answer = cnt cnt = 0 return answ..
namedtuple from collections import namedtuple person_info = namedtuple("info", "name age address") info = person_info("kim", 12, "111-11") info.name, info.age, info.address와 같이 접근 할 수 있다. name, age, address를 인덱스 0 ~ 2(ex: info[0])로도 접근할 수 있다. defaultdict 딕셔너리를 사용하다 보면, 어떤 키에 대한 값이 없는 경우에 대한 처리를 해야하는 경우가 있다. 딕셔너리에 대한 초기값을 지정하고자 할 때 defualtdict을 사용할 수 있다. def cnt_word(words): cnt = {} for word in ..