Algorithm/문제풀이

[Python][Programmers] 기초문제_12921, 12919, 12918, 12917, 12916

Deveun 2021. 5. 12. 05:36

- [12921] 소수 찾기

def solution(N):
    
    li = [True for _ in range(2, N+1)]
    
    for idx, val in enumerate(li):
        i = idx+2
        if val == False :
            continue
        for j in range(2,N):
            if i*j > N:
                break
            li[i*j-2] = False
            
    answer = filter(lambda x: x == True, li)
    
    return len(list(answer))

-> 에라토스테네스의 체

 

+++ 다른 사람 풀이 참고

def solution(N):
    
    nums = set(range(2, N+1))
    for n in range(2, N+1):
        if n in nums:
            nums -= set(range(n*2, N+1, n))
    return len(nums)

-> set 사용

 

- [12919] 서울에서 김서방 찾기 

def solution(seoul):
    num = seoul.index("Kim")
    answer = '김서방은 %d에 있다' %num
    return answer

 

- [12918] 문자열 다루기 기본 

def solution(s):
    
    answer = False
    length = len(s)
    if length == 4 or length == 6:
        if len(list(filter(lambda x: x>='0' and x<='9', s))) == length:
            answer = True
    return answer

++ 다른 사람 풀이 참고

return s.isdigit() and len(s) in (4, 6)

--> 문자열이 숫자인지 판단하는 isdigit() 함수와 len(s) in (4,6)으로 간단하게 구현가능!

 

- [12917] 문자열 내림차순으로 배치하기

def solution(s):
    
    li = sorted(list(s), reverse=True)
    return ''.join(li)

 

- [12916] 문자열 내 p와 y의 개수

def solution(s):

### 풀이1 (비효율 ㅜ)
#     p,y = 0,0
#     for ch in s.lower():
#         if ch == 'p':
#             p+=1
#         if ch == 'y':
#             y+=1
    
#     return True if p == y else False

    return True if s.lower().count('p') == s.lower().count('y') else False