Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Python
- react
- stdin vs input
- typescript
- CSS
- 최적화
- 파이썬
- HTML
- javascript
- firebase
- 타입스크립트
- nodejs
- C++
- k for k
- 자바스크립트
- next Link
- Android
- 파이어베이스
- NPM
- 알고리즘
- 프론트엔드
- 백준 스택 시간초과 python
- 안드로이드
- 백준 스택
- 리액트
- TS
- 코딩테스트
- JS
- 스택
- kotlin
Archives
- Today
- Total
sooleeandtomas
[day12] 코딩테스트 알고리즘 - lv.2 완전 탐색 (소수 찾기) python (feat.permutations) 본문
코딩테스트 알고리즘/탐색
[day12] 코딩테스트 알고리즘 - lv.2 완전 탐색 (소수 찾기) python (feat.permutations)
sooleeandtomas 2022. 10. 8. 00:55프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
오늘은 python 문법 폭탄을 맞았다.
python의 set, permutations, 병합 업데이트 연산자 |= vs |, extend vs append ... 를 배웠다.
하단에 나와있는 문법들을 참고하여 아래 코드를 보자.
참고 코드
from itertools import permutations
def solution(numbers):
answer = 0
case = makeCase(numbers)
for n in case:
if isPrime(n):
answer += 1
return answer
def makeCase(numbers):
result = []
for i in range(1, len(numbers) + 1):
permutated = map(''.join, permutations(numbers, i))
#join으로 ('1','2')의 형태를 '12'문자열로 합쳐줌
mapped = list(map(int, permutated))
#'12'문자열을 12 숫자로 형변환
result.extend(mapped)
# 반복문을 돌며 각각 생성됬던 배열들을 하나로 합쳐줌. [...]
result = list(filter(lambda x:x > 1, list(set(result))))
return result
def isPrime(number):
for i in range(2, int(number * 1/2) + 1):
if number % i == 0:
return False
return True
다른 사람의 코드 #에라토스테네스 체를 set을 이용하여 풀었다.
from itertools import permutations
def solution(n):
a = set()
for i in range(len(n)):
a |= set(map(int, map("".join, permutations(list(n), i + 1))))
#print('a1')
a -= set(range(0, 2))
#print('a2')
for i in range(2, int(max(a) ** 0.5) + 1):
a -= set(range(i * 2, max(a) + 1, i))
#print('set')
#print('a3')
return len(a)
solution('17')
#a1: {1, 7}
#a1: {1, 71, 17, 7}
#a2 {71, 17, 7}
#set {4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70}
#a3 {71, 17, 7}
#set {6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69}
#a3 {71, 17, 7}
#set {32, 64, 36, 68, 8, 40, 12, 44, 60, 16, 48, 20, 52, 24, 56, 28}
#a3 {71, 17, 7}
#set {65, 35, 70, 40, 10, 45, 15, 50, 20, 55, 25, 60, 30}
#a3 {71, 17, 7}
#set {66, 36, 42, 12, 48, 18, 54, 24, 60, 30}
#a3 {71, 17, 7}
#set {35, 70, 42, 14, 49, 21, 56, 28, 63}
#a3 {71, 17, 7}
#set {32, 64, 40, 16, 48, 24, 56}
#a3 {71, 17, 7}
permutations
프로그래머스의 레벨2 완전탐색 - 소수찾기 문제
파이써닉하다라는게 이런것인걸까 . . . ?
permutations를 사용하면 조합을 알아서 해준다.
from itertools import permutations
from itertools import permutations
a = '123'
permutated = list(permutations(a, 2))
#[('1', '2'), ('1', '3'), ('2', '1'), ('2', '3'), ('3', '1'), ('3', '2')]
joined = list(map(''.join, permutated))
#['12', '13', '21', '23', '31', '32']
mapped = list(map(int, joined))
#[12, 13, 21, 23, 31, 32]
extend vs append
extend는 iterable한 항목을 펼쳐서 넣어줍니다.
append는 항목 자체를 통째로 넣어줍니다.
a = ['1','2','3']
b = ['4','5','6']
a.append(b)
print(a)
#['1','2','3', ['4','5','6']]
a.extend(b)
print(a)
#['1','2','3','4','5','6']
python set 집합 자료형
집합 자료형의 특징은 아래와 같다.
- 중복을 허용하지 않는다.
- 순서가 없다(Unordered).
- -= 연산을 통해 삭제할 수 있다.
- |= 연산을 통해 병합할 수 있다.
a = {1, 7}
a -= set(range(0, 2))
# a = {7}
s2 = set("Hello")
#s2 = {'e', 'H', 'l', 'o'}
s1 = set([1,2,3])
#s1 = {1, 2, 3}
병합 업데이트 연산자 (|=)
d1 = {"a": 0, "b": 1, "c": 2}
d2 = {"c": 20, "d": 30}
# Merge, |
d1 | d2
{"a": 0, "b": 1, "c": 20, "d": 30}
#d1 = {"a": 0, "b": 1, "c": 2}
# Update, |=
d1 |= d2
#d1 = {"a": 0, "b": 1, "c": 20, "d": 30}
'코딩테스트 알고리즘 > 탐색' 카테고리의 다른 글
[day26] 코딩테스트 알고리즘 - 거리두기 확인하기 (feat.파이썬) (0) | 2022.11.07 |
---|---|
[day25] BFS 기초 (1) (0) | 2022.11.01 |
[day17] 코딩테스트 알고리즘 - 깊이/너비 우선 탐색 (타겟넘버) (feat.파이썬 product) (0) | 2022.10.13 |
[day13] 백준 9095번 완전 탐색 (1,2,3 더하기) python (0) | 2022.10.09 |
[day11] 코딩테스트 알고리즘 - 완전 탐색 (카펫) python (0) | 2022.10.07 |
Comments