ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 소수 찾기(LV2)
    알고리즘 2020. 8. 6. 18:06

     

     

    200801 기상 : 9시 20분!


    문제 설명

    한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

    각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해 주세요.

    제한사항

    numbers는 길이 1 이상 7 이하인 문자열입니다.

    numbers는 0~9까지 숫자만으로 이루어져 있습니다.

    013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

     

     

    입출력 예

     

    numbers

    return

    17

    3

    011

    2

     

     

    첫 번째

    5개 맞음 ㅋ

    import itertools
    
    def solution(s):
        # 정답 변수
        answer = 0
        s=list(map(''.join, itertools.permutations(s)))
        tmp=int(s[0])
        while tmp >10:
            s.append(tmp%10)
            tmp /=10
        s=set(map(int,s)) # 중복 허용 안할라고 사용 
        for i in s :
            if i%2!=0 and i!=1:
                answer +=1
        return answer
    

    두 번째

    반타작

    from itertools import permutations
    # 라이브러리 추가 permutation 쓰기 위해서
    def solution(n):
        # 소수 갯수 넣는 변수
        answer=0
        # '17'을 넣을 경우 17,71 만 들어감 그래서 1, 7을 따로 넣기 위한 변수 만듦
        tmp=list(n)
        # ['1','7'],['7','1'] 을 join해줌  그러면 17,71
        a = list( map("".join, permutations(n)))
        #각 1,7, 넣어줌 
        for i in tmp :
            a.append(i)
        # 중복 값 제거를 위해 set 사용    
        a=set(map(int,a))
        # 0 1 값 제거 함
        a -= set(range(0, 2))
        # 소수 찾는 반복문
        for i in a :
            for j in range(2,i):
                if i%j==0:
                    break
            else:
                answer +=1
            # for ~ else 그 안에 반복문 다 완료했을 경우, else 실행. 소수 추가. 
        return answer

     

     

    ⛏세 번째

    질문하기 참고하고 수정

    def solution(n):
        # 소수 갯수 넣는 변수
        answer=0
        # 계산할 리스트 변수
        a=[]
      	# 모든 경우의 수를 넣어줌
        for i in range(1, len(n)+1):# 1~문자열의 갯수
            # 17인 경우 1의 자리 1, 7  
            # 다음 반복문에서 2가 들어가니까 10의 자리 17,71   
            numbers=permutations(n,i)
            # 각 값들 연결시켜서 a 에 넣어줌. 
            for j in numbers:
                tmp="".join(j)
                a.append(int(tmp))
        # 중복값 제거
        a=set(a)
        # 0 1 값 제거 함
        a -= set(range(0, 2))
        # 소수 찾는 반복문
        for i in a :
            for j in range(2,i):
                if i%j==0:
                    break# 나누어떨어지면 소수 X
            else: 
                answer +=1
            # for ~ else 그 안에 반복문 다 완료했을 경우, else 실행. 소수 추가. 
        return answer

    느낀 점

    나태해 너무.. ㅠ

    운동 조금 했다고 몸이 아프다

    갑자기 생각난 건데

    고등학교 때 친구네 집에서 자는데 너무 민폐인 거 같아서

    아침 6시 50분에 나와서 학교 갔는데

    알고 보니까 어머니가 나 맛있는 거 해주시려고 아침에 일어나셔서

    제육볶음 해주신 거 생각난다ㅠ 모르고 그냥 나와버렸음 흑 ㅠ

    여긴 그냥 일기장인데?

    댓글

Designed by Tistory.