본문 바로가기

코딩테스트 준비/프로그래머스

[프로그래머스] 소수 찾기

반응형

 

 

 

안녕하세요~

27년차 진로탐색꾼 조녁입니다!!

1일 1코테 18일차!!! 

 

어제 장고를 써보기로 맘먹었는데.. 그 맘먹고 코테로는 다시 돌아올수없었다 ㅠ

 

 

· 문제명 : 소수 찾기

· 사용 언어 : Python3

· 난이도 : Level1

· 문제 설명 

programmers.co.kr/learn/courses/30/lessons/12921

 

코딩테스트 연습 - 소수 찾기

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상

programmers.co.kr

 

오답 코드

def solution(n):
    answer=[]
    sosu =[]
    for i in range(2,n+1):
        for j in range(2,i):
            if i%j !=0:
                answer.append(i)
            else:
                continue
                
        if answer.count(i) == i-2:
            sosu.append(i)
 
    return len(sosu)

 

 

어떻게 틀렸었는 지 기록하는 것도 나쁘지 않을 것 같아서 오늘부터는 중간에 틀렸던 코드도 올려볼 생각이다. 위 코드는 31점이 나왔는데 시간 초과로 밑에 문제들을 못 풀었다. 

n보다 작은 모든 자연수 i 에 대해서, i보다 작은 수들 j로 나눠서 안나눠질떄 i값을 세서 그 수가 i-2개인 것들은 소수로 판정했다.

말로 써도 긴데 아마 효율성이 매우 떨어져서 시간초과가 난 것 같다. (for문 두개 .. if 문 두개.. 이게 뭐게..)

 

다시 풀어봐야겠다.

 

오답 코드2

def solution(n):
    answer=[]
    sosu =[]
    for i in range(2,n+1):
        for j in range(2,i):
            if i%j ==0:
                answer.append(i)
    
    return n-len(list(set(answer)))-1

 

슬럼프인건가.. 못풀겠다 흑흑 ... 이번엔 56점 나왔다. for문을 두번쓰면 안되나보다.

 

정답 코드

def solution(n):
    num=set(range(2,n+1))

    for i in range(2,n+1):
        if i in num:
            num-=set(range(2*i,n+1,i))
    return len(num)

 

 

https://link.coupang.com/a/rGILU

 

[한빛미디어]이것이 취업을 위한 코딩 테스트다 with 파이썬

COUPANG

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형