핵심 아이디어 이 문제는 비트 연산 알고리즘을 사용하면 쉽게 폴리는 문제이다. 첫 코드 def solution(n, arr1, arr2): temp = [] for i in range(0, n): temp.append(bin(arr1[i] | arr2[i])) temp[i] = temp[i][2:] temp[i] = temp[i].zfill(n) temp[i] = temp[i].replace('1', '#').replace('0', ' ') return temp 개선된 코드 def solution(n, arr1, arr2): temp = [] for i in range(0, n): temp.append(bin(arr1[i] | arr2[i])) temp[i] = temp[i][2:].zfill(n).re..
문제 설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 핵심 아이디어 1. 입력되는 알파뱃의 대문자와 소문자로 나눈다. 2. 각 문자마다 아스키 코드 값을 0~25사이로 만든 뒤, n값을 더한 나머지 값을 다시 아스키 코드 값을 더해서 반환해준다. 3. 띄어쓰기는 조건문에서 따로 반환해 주었다. 첫 코드 def solution(s, n): answer = [] for i in range(0, len(s)): if s..
문제 설명 d는 부서별로 신청한 예산 금액이 들어있는 배열이며, 정해진 budget(예산) 안에서 부서에 원하는 금액을 모두 지원해줘야 한다. 최대 몇 개의 부서에 예산을 지원할 수 있는지 구하여라. 첫 코드 def solution(d, budget): d.sort() for i in enumerate(d): budget -= i[1] if budget < 0: break if budget == 0: answer = (i[0]+1) else: answer = (i[0]) return answer 개선된 코드 def solution(d, budget): d.sort() temp=0 if sum(d) budget: return i 핵심 아이디어 제일 처음으로 배열 d를 오름차순으로 정렬해준다. 그리고, 만약..
문제 설명 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 다소 복잡한..