[프로그래머스/Python] 완전탐색 - 소수찾기

Sujin Lee·2022년 3월 30일
0

코딩테스트

목록 보기
10/172
post-thumbnail

소수

  • 1과 자기 자신 외의 약수를 가지지 않는 1보다 큰 자연수

🤓 나의 풀이

# 소수를 판별하는 함수
def is_prime_number(x):
    if x < 2:
        return False
    for i in range(2,x):
        if x % i == 0:
            return False
        else:
            return True

def solution(numbers):
    from itertools import permutations
    answer = []
    nums = []
    score = 0
    for i in range(1, len(numbers)+1):         
  	  # [['0', '1'], ['01', '10', '11'], ['110', '011', '101']]
      nums.append(list(set(map("".join,permutations(numbers, i)))))
    # [0, 1, 101, 10, 11, 110]
    answer = list(set((map(int,sum(nums,[])))))
    
    for i in range(len(answer)):
        if is_prime_number(answer[i]) is True:
            score += 1
    return score
  • 처음에 작성했던 prime: 정답은 맞췄지만 통과 못함..
# 잘못된 함수
# 2 ~ x 사이의 모든 숫자를 비교해야하는데, else 때문에 True로 종료됨
def prime(x):
    if x == 1 or x == 0:
        return False
    for i in range(2,x):
        if x % i == 0:
          return False
        else:
          print(x,i) # 453 2
          return True

print(prime(453)) # True

# 올바른 함수
def is_prime_number(x):
  if x < 2:
        return False
  for i in range(2, x):
    if x % i == 0:
      print(x,i) # 453 3
      return False
  return True

print(is_prime_number(453)) # False
  • nums.append(list(set(map("".join,permutations(numbers, i)))))
    permutation... 쓰면 안되는게 아니었구나 ㅋ
  • answer = list(set((map(int,sum(nums,[])))))

✏️ Python 문법

1. 리스트 합치기 (sum, extend, +)

  • +: 덧셈 연산을 통해서 새로운 리스트를 만들기 때문에 반환해서 새 리스트로 받을 변수를 만들어 주어야 함
a = [7, 6, 5, 4]
b = [1, 2, 3] 
result1 = a + b 
result2 = b + a 
print("a + b =",result1) # a + b = [7, 6, 5, 4, 1, 2, 3]
print("b + a =",result2) # b + a = [1, 2, 3, 7, 6, 5, 4]
  • 리스트1.extend(리스트2): 리스트 메서드

리스트1에 리스트2를 붙이게 됨 = 리스트1 이 변경되는 방법
리스트를 합칠 때는 + 방법과 extend방법을 구분해서 사용

a = [7, 6, 5, 4] 
b = [1, 2, 3] 
c = [0, 0, 0, 0, 0] 
a.extend(b) 
print("a : ",a) # a :  [7, 6, 5, 4, 1, 2, 3]
b.extend(c) 
print("b : ",b) # b :  [1, 2, 3, 0, 0, 0, 0, 0]
  • sum(iterable, start = 0)
    리스트나 튜플 처럼 인덱스 순환 접근이 가능한 자료형이고 내부에 숫자(정수, 실수)로만 이루어져 있어야함
    인자로 들어온 iterable 내부 모든 요소의 합을 반환
    두번째 인자는 처음으로 또 더해줄 숫자 (default는 0)
    iterable의 합 + start 값을 반환
a = [[1,2], [3,4,5]]
b = [1,2,3]

print(sum(b)) # 6
print(sum(b,1000)) # 1006
print(sum(a,[])) # [1, 2, 3, 4, 5] = [] + [1,2]+ [3,4,5]

출처
https://blockdmask.tistory.com/558 [개발자 지망생]

profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글