코딩한걸음
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
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!