小数点を検索
方法
与えられた文字列を重複しない整数リストに変換し、小数を判別する
1.文字列->重複リストなし
from itertools import permutations
numbers = '011'
permuList = []
permuSet = []
for i in range(1, len(numbers)+1):
tmp = list(permutations(numbers, i))
for j in range(len(tmp)):
if(len(tmp[j])==1):
permuList.append(int(tmp[j][0]))
else:
sum = ''
for k in range(len(tmp[j])):
sum += tmp[j][k]
permuList.append(int(sum))
permuSet = list(set(permuList)) #중복 제거
print(permuList) #중복 고려 안한 original list
print(permuSet) #set을 이용해 중복 제거한 list
✏️ notes
配列の使用(itertoolsライブラリ配列)
リストのトゥーフに近づくのは難しいと思いますが...tupleも同様にインデックスでアクセス!!しかし、tuple要素は変更できません.
リストの重複を除去するのは簡単です.リストをsetにリセットすればいい!(フォーマットはlist->set->listと同じ)
set1 = set(list1)
list2 = list(set1) #중복없는 리스트가 됨
2.小数を判別するlist1 = [0, 1, 101, 10, 11, 110]
for n in list1:
flag = False
if(n == 0 or n == 1): continue
for i in range(2, n-1): #1과 자기자신 외의 수로 나누어지는지
if(n % i == 0):
flag = True
break
if(flag == True): continue
print(n)
最終コード
from itertools import permutations
def solution(numbers):
#1. 문자열->중복없는 리스트화
permuList = []
permuSet = []
for i in range(1, len(numbers)+1):
tmp = list(permutations(numbers, i))
for j in range(len(tmp)):
if(len(tmp[j])==1):
permuList.append(int(tmp[j][0]))
else:
sum = ''
for k in range(len(tmp[j])):
sum += tmp[j][k]
permuList.append(int(sum))
permuSet = list(set(permuList)) #중복 제거
#2. 소수판별
cnt = 0
for n in permuSet:
flag = False
if(n == 0 or n == 1): continue
for i in range(2, n-1): #1과 자기자신 외의 수로 나누어지는지
if(n % i == 0):
flag = True
break
if(flag == True): continue
cnt += 1
return cnt
👀 Python-未知の他の解釈を探る
」tuple文字列貼り付けtip
''.join(map(str, 해당 리스트))
89 join()関数String間に特定の文字列を挿入することによって分割された文字列をマージする関数です.
89 map()関数
map(f,iterable)は、関数(f)と反復可能(iterable)のデータ型を入力し、入力したデータ型の各要素を組み合わせて関数(f)が実行した結果を返す関数である.
そのためです.🐶お疲れ様でした…こんなやり方があったそうです.🥲
このように歩くと、時間の複雑さも少なくなります.これを利用して解いてみましょう.
改良されたソースコード
from itertools import permutations
def solution(numbers):
#1. 문자열->중복없는 리스트화 (변경)
permuList = []
permuSet = []
for i in range(1, len(numbers)+1):
tmp = list(permutations(numbers, i))
for j in range(len(tmp)):
num = int(''.join(map(str, tmp[j])))
permuList.append(num)
permuSet = list(set(permuList)) #중복 제거
#2. 소수판별
cnt = 0
for n in permuSet:
flag = False
if(n == 0 or n == 1): continue
for i in range(2, n-1): #1과 자기자신 외의 수로 나누어지는지
if(n % i == 0):
flag = True
break
if(flag == True): continue
cnt += 1
return cnt
📚 reference
別の解法https://velog.io/@insutance/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Python-%EC%86%8C%EC%88%98-%EC%B0%BE%EA%B8%B0
join()、map()関数
https://velog.io/@qhsh866/Python-split-join-map-%EB%AC%B8%EC%9E%90%EC%97%B4-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC
Reference
この問題について(小数点を検索), 我々は、より多くの情報をここで見つけました https://velog.io/@dldbdud314/프로그래머스-소수탐색-완전탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol