728x90
반응형
1. Today I Learned
1.1. 어떤 문제가 있었는지
<python />
# https://school.programmers.co.kr/learn/courses/30/lessons/42839
# 소수 찾기
# 문제 설명
# 한자리 숫자가 적힌 종이 조각이 흩어져있습니다.
# 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
# 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때,
# 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록
# solution 함수를 완성해주세요.
# 제한사항
# numbers는 길이 1 이상 7 이하인 문자열입니다.
# numbers는 0~9까지 숫자만으로 이루어져 있습니다.
# "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
프로그래머스 코딩테스트 소수찾기 문제
1.2. 내가 시도해 본 것들
<python />
# 필요한 변수들 정의
numbers = "123"
num_list = []
arr = []
answer = 0
# 일단 하드코딩하면서 생각해보기
for i in range(len(numbers)):
# 1자리수 넣기
arr.append(numbers[i])
for j in range(len(numbers)):
if i != j:
# 2자리수 넣기
arr.append(numbers[i]+numbers[j])
for k in range(len(numbers)):
if i != j and j != k and i != k:
# 3자리수 넣기
arr.append(numbers[i]+numbers[j]+numbers[k])
print(arr)
이런식으로 하드코딩 해봤다. 하지만 for문이 이렇게 중첩되는게 좋지않기 때문에
다른방식으로 찾는게 좋을거같다
1.3. 어떻게 해결 했는지
일단은 하드코딩으로 시도해보고 힘들다면 관련 함수를 이용하는게 좋다고 생각한다
<python />
from itertools import permutations
list(permutations(list,n))
list(permutations( list, n )) 는 리스트의 인자들이 중복되지 않게 n자리수 순서쌍을 찾아준다.
<python />
numbers = "123"
num_list = []
arr = []
answer=0
# 먼저 숫자조합을 찾아야함
# 제한사항에 길이 1이상 7이하임
# 일단 하드코딩하면서 생각
# numbers를 리스트로
for i in numbers:
num_list.append(i)
# permutations 를 이용해서 중복되지 않는 조합 구하기
from itertools import permutations
# for문으로 permutations 자리수 조합 바로 찾기
for i in range(1,len(num_list)+1):
a = list(permutations(num_list,i))
# for문으로 찾은 조합들 문자열로 만들기
for j in a:
# 문자열 초기화
number=""
for k in j:
number += k
# 문자열 arr에 숫자로 넣기 및 0,1 거르기
if int(number)!=0 and int(number)!=1 :
arr.append(int(number))
# set으로 중복 제거
arr = set(arr)
# 소수찾기
for i in arr:
arr2 = []
for j in range(2,int(i**(1/2)+1)):
if i%j==0: arr2.append(j)
if len(arr2)==0: answer+=1
print(answer)
permutations를 쓰면 엄청 쉽지만 안쓰면 어려운거같다..
1.4. 무엇을 새롭게 배웠는지
permutations의 활용법에 대해 추가적으로 배웠다.
itertools의 함수들이 뭐가있는지 한번 더 곱씹어봐야겠다.
728x90
반응형