문제 설명 1부터 입력받은 숫자 n 사아에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 첫 코드 def solution(n): temp = [] for sosu in range(1, n+1): g = [] for i in range(1, sosu+1): if sosu % i == 0: g.append(1) if sum(g) == 2: temp.append(1) answer = sum(temp) return answer 정답은 잘 도출해냈지만, 시간 복잡도 측면에서 굉장히 좋지 못한 알고리즘이었다. 에라토스테네스의 체를 사용하여 효율성 높은 알고리즘으로 다시 짜보았다. 개선된 코드 import math def solution(n): array = [True for i in rang..
첫 코드 def solution(a, b): days = {0 : 'THU', 1: 'FRI', 2: 'SAT', 3 : 'SUN', 4 : 'MON', 5 : 'TUE', 6 : 'WED'} months = {1 : 31, 2: 29, 3: 31, 4 : 30, 5 : 31, 6 : 30, 7 : 31, 8 : 31, 9 : 30, 10 : 31, 11 : 30, 12 : 31} #일 수를 다 더해 주고 -> b로 반환해준다. #b를 7로 나누어서 반환해준다. #1월 if not a == 1: for i in range(1, a): b += months[i] return days[b%7] 핵심 아이디어 1월이 아닌 월을 제외하고, 월마다 그 전의 요일들 다 더하여 7로 나누어서 나머지 값으로 요일을 계..
첫 코드 def solution(participant, completion): dict_1 = {} dict_2 = {} for i in range(0, len(participant)): dict_1[i] = participant[i] for i in range(0, len(completion)): dict_2[i] = completion[i] dict_3 = {v:k for k,v in dict_2.items()} for i in range(0, len(participant)): if dict_1[i] in dict_3.keys(): temp = dict_1.pop(i) dict_3.pop(temp) answer = list(dict_1.values()).pop() return answer 다소 복잡한..
문제 설명 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. 첫 코드 def solution(arr, divisor): answer = [] for i in range(0, len(arr)): if arr[i] % divisor == 0: answer.append(arr[i]) if len(answer) == 0: answer.append(-1) answer = sorted(answer) return answer 개선된 코드 def solution(arr, divisor): answer = [arr[i] for i ..
문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들면 18의 자릿수 합은 1+8 = 9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 첫 코드 def solution(n): ans = [] temp = str(n) for i in range(len(temp)): ans.append(int(temp[i])) summation = sum(ans) if n % summation == 0: answer= True else: answer= False return answer 개선된 코드 def solution(x): return x % sum(map(int,..
문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 핵심아이디어 첫 번째 인덱스는 0으로 시작하기 때문에, 슬라이싱을 i-1로 두면 편하다. sorted() 함수를 사용하면 리스트를 오름차순으로 정렬할 수 있다. 첫 코드 def solution(array, commands): answer = [] for i in range(0, len(commands)): temp = sorted(array[commands[i][0]-1:commands[i][1]]) answer.append(temp[commands[i][2]-1]) return answer 개선된 코드 def solution(array, commands): answer = [] for ..