본문 바로가기

~2023/Codility

Codility - ChocolatesByNumbers 문제풀이 - Henry's Algorithm 안녕하세요!ㅎㅎ 알고리즘을 공부하는 개발자 Henry입니다! 오늘은 제가 오랜만에 Codility 사이트에서 문제를 한번 풀어보았는데요, Painless 난이도의 문제여서 비교적 쉽게 풀리나 싶었는데, 생각보다 시간이 걸렸던 것 같습니다. 처의 첫번째 시도는 아래와 같습니다! # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solution(N, M): # write your code in Python 3.6 chocolates = [0]*N _current = 0 while chocolates[_current] != 1: chocolates[_current] = 1 _current = .. 더보기
에라토스테네스의 체 1보다 큰 모든 정수는 소수와 합성수로 이루어진다. 소수는 1과 자기자신으로만 나누어떨어지는 수이고, 그 외 나머지를 합성수라고 한다. 1은 소수도 합성수도 아니다. 소수를 찾는 방법은 에라토스테네스의 체 방식으로 찾을 수 있다. 1. 2를 제거하고, 2의 배수를 제거한다. 2. 3을 제거하고, 3의 배수를 제거한다. 3. 해당 방법을 sqrt(n)까지 반복한다. - sqrt는 루트 자신 * 자신 < n 때까지만 반복한다. 더보기
Codility - CountSemiprimes 문제풀이 - Henry's Algorithm 아래는 생각나는대로 에라토스테네스의 체를 사용하여 문제를 풀려고 했던 방법이다. 하지만 생각대로 쉽게 풀리지 않았다. # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solution(N, P, Q): # write your code in Python 3.6 result = [] for a,b in zip(P,Q): if b 더보기
Codility - CountNonDivisible 문제풀이 - Henry's Algorithm # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solution(A): # write your code in Python 3.6 arr__ = [0]*(2*len(A)+1) arr = [] saved = [-1]*(2*len(A)+1) for i in range(len(A)): arr__[A[i]] += 1 for i in range(len(A)): divisor = 0 if saved[A[i]] != -1: arr.append(saved[A[i]]) continue for j in range(1,int(A[i]**0.5)+1): if A[i]%j == 0: divisor += arr_.. 더보기
Codility - Peaks 문제 풀이 - Henry's Algorithm A non-empty array A consisting of N integers is given. A peak is an array element which is larger than its neighbors. More precisely, it is an index P such that 0 A[P + 1]. For example, the following array A: A[0] = 1 A[1] = 2 A[2] = 3 A[3] = 4 A[4] = 3 A[5] = 4 A[6] = 1 A[7] = 2 A[8] = 3 A[9] = 4 A[10] = 6 A[11] = 2 has exactly three peaks: 3, 5, 10. We w.. 더보기
Codility - MinPerimeterRectangle 문제풀이 처음에 봤을 때, 문제를 이해하는데는 그렇게 어렵지 않았다. 그냥 약수 구해서 두 값 더해서 *2 해주면 되는데, 그 중 최소값을 찾는 문제구나 라는 생각만 하였고 접근했다. 첫 시도했을 때는 아래의 코드와 같다. 그런데 80%의 정확도만 나왔다. 그 원인을 살펴보니 큰 수에 대해서는 for문에서 i 가 일일히 +1씩 되면서 진행되는 부분이 성능이 좋지 않음을 알 수 있었다.(Timeout Error 발생ㅜㅜ) 그래서 for i in range(2,int(i/2)): 처럼 나누기 2를 해보기도 하고 그랬는데, 역시나 마찬가지였다. # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solu.. 더보기
Codility - Flags 문제풀이 맨 아래 코드에 정답 나와있습니다. ==============아래 코드들은 성공하기까지의 과정 ============= 처음 봤을때, 문제가 이해가 잘 안되는 것이 가장 큰 문제! 그래도 해석해서 처음 푼 풀이방법 정확도: 40%ㅜㅜ # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solution(A): # write your code in Python 3.6 #print(A) if len(A) = peak_j*j: peak_num_ += 1 peak_cnt_ += 1 if peak_arr[i] >= peak_arr[0]+j*peak_cnt_: peak_num_ += 1 peak_cnt.. 더보기
Codility - CountFactors 문제풀이 나의 코드 시간 복잡도: O(sqrt(N)) or O(N) # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solution(N): # write your code in Python 3.6 if N == 1: return 1 cnt = 0 for i in range(int(N/2)): # 약수이면 i = i+1 if N/i%1 == 0: if N//i < i: break if N//i == i: cnt += 1 else: cnt += 2 return cnt pass 누군가의 코드 시간복잡도: O(sqrt(N)) # you can write to stdout for debugging pur.. 더보기