Algorithm/Programmers 16

[Programmers] 합성수 찾기

Q. 약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요. Source: https://school.programmers.co.kr/learn/courses/30/lessons/120846 처음 직관적으로 생각한 방법은 n에서 소수의 개수를 빼는 것이었다 -> 전체를 순회하기보다 제곱근+1의 값까지 체크하여 소수여부를 판별한뒤 (성능,속도면에서 전체를 체크하는 것보다 제곱근까지만 체크하는 것이 빠르기 때문) -> 전체개수에서 소수의 개수를 빼서 리턴하자 import math def solution(n): isPrime = 0 for i in range (1, int(math.sqrt(n)) ..

[Programmers] 영어가 싫어요 (딕셔너리,정규표현식/ replace() 사용별 답안)

source: https://school.programmers.co.kr/learn/courses/30/lessons/120894 1. 딕셔너리와 정규표현식 사용 import re def solution1(numbers): s = '' d = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'} #findall()-정규식과 매칭되는 모든 문자열을 리스트 형식으로 리턴 findall(r'패턴문자열', 문자열) for i in re.findall(r'(zero|one|two|three|four|five|six|seven|eight|nine)',nu..

[Programmers] 진료 순서 정하기 (list comprehension , lambda 사용별 답안)

source: https://school.programmers.co.kr/learn/courses/30/lessons/120835 idea: list comprehension , lambda 1. list comprehension def solution1(emergency): sorted_emergency = sorted(emergency, reverse = True) return [sorted_emergency.index(i) + 1 for i in emergency] 2. lambda def solution2(emergency): sorted_emergency = sorted(emergency, reverse = True) return list(map(lambda x: sorted_emergency...

[Programmers] 잘라서 배열로 저장하기 (f-string, 정규표현식/ list comprehension 사용별 답안)

source: https://school.programmers.co.kr/learn/courses/30/lessons/120913 자바에서 정규표현식은 보통 이메일이나 전화번호와 같은 값을 객체에 저장할 때 사용했는데, 구글링하면 정리된 자료가 많아 대부분 긁어서 사용했습니다. 파이썬의 정규표현식 중 메타언어가 뭔지, f-string이 뭔지 추가로 알 수 있어서 좋았던 문제입니다. 1.f-sting, 정규표현식 사용 import re def solution(my_str, n): p = re.compile(f'.{{1,{n}}}') return p.findall(my_str) 2. list comprehension 사용 def solution2(my_str, n): return [my_str[i: i + ..

[Programmers] 한 번만 등장한 문자 (list comprehension, Collections.Counter() 사용별 답안)

중복제거니까 set을 쓸까하다가, 순서가 ordered 되어야하니 패스. Collection 라이브러리의 orderDict이 중복제거 시 성능이 좋길래 무턱대고 써 from collections import OrderedDict def solution(s): answer= ''.join(sorted(list(OrderedDict.fromkeys(s)))) if len(answer) == 0: return '' else: print(answer) 당연히 안됩니다.. 매개변수 s가 "abcabcadc" 라면 "d"를 리턴해야하는데 위의 코드는 "abcd"를 리턴한다. 그럼 어떻게 풀어야하나. 1) 리스트 컴프리헨션 2) Collections의 counter 두가지로 풀어보자. 1) list comprehen..

[Programmers] 중복된 문자 제거

def solution(my_string): ''' source: https://school.programmers.co.kr/learn/courses/30/lessons/120888 ''' return ''.join(dict.fromkeys(my_string)) idea: - 중복된 문자를 제거한다 -> set - 순서를 지키면서 합칠 수 있는 것 -> 딕셔너리 사용 여기서는 dict.fromkeys(순회할 자료, 키에 매핑될 값) 사용 -> 키는 중복을 허용하지 않고 순서를 지킴 -> 키에 매핑될 값은 생략 가능함