Link Search Menu Expand Document

프로그래머스 파이썬 언어 레벨1 풀이

Table of contents

  1. 모의고사
  2. K번째수
  3. 체육복
  4. 2016년
  5. 가운데 글자 가져오기
  6. 나누어 떨어지는 숫자 배열
  7. 두 정수 사이의 합
  8. 문자열 내 마음대로 정렬하기
  9. 문자열 내림차순으로 배치하기
  10. 문자열 다루기 기본
  11. 서울에서 김서방 찾기
  12. 수박수박수박수박수박수?
  13. 문자열을 정수로 바꾸기
  14. 내적
  15. 시저 암호
  16. 약수의 합
  17. 이상한 문자 만들기
  18. 자릿수 더하기
  19. 자연수 뒤집어 배열로 만들기
  20. 정수 내림차순으로 배치하기
  21. 정수 제곱근 판별
  22. 제일 작은 수 제거하기
  23. 짝수와 홀수
  24. 최대공약수와 최소공배수
  25. 콜라츠 추측
  26. 평균 구하기
  27. 하샤드 수
  28. 핸드폰 번호 가리기
  29. 행렬의 덧셈
  30. x만큼 간격이 있는 n개의 숫자
  31. 직사각형 별찍기
  32. 신규 아이디 추천

모의고사

Min : 0.01ms, 10.2MB
Max : 3.05ms, 10.3MB

def solution(answers):
    
    arr1, arr2, arr3 = [1,2,3,4,5], [2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]
    cnt1, cnt2, cnt3 = 0,0,0
    
    for i in range(len(answers)):
        ans = answers[i]
        cnt1+=ans==arr1[i%5]
        cnt2+=ans==arr2[i%8]
        cnt3+=ans==arr3[i%10]
    
    m = max(cnt1,cnt2,cnt3)
    
    answer = []
    if m == cnt1:
        answer.append(1)
    if m == cnt2:
        answer.append(2)
    if m == cnt3:
        answer.append(3)
    
    return answer

2020.12.16

K번째수

Min : 0.01ms, 10MB
Max : 0.01ms, 10.3MB

def solution(array, commands):
    answer = []
    for c in commands:
        answer.append((sorted(array[c[0]-1:c[1]]))[c[2]-1])
    return answer

2020.12.16

체육복

Min : 0.01ms, 10.1MB
Max : 0.01ms, 10.3MB

def solution(n, lost, reserve):  
    arr = [1]*(n+1)
    
    for n in lost:
        arr[n]=0
    for n in reserve:
        arr[n]+=1
    for i in range(1,len(arr)-1):
        if arr[i]==0 and arr[i-1]==2:
            arr[i]=1
            arr[i-1]=1
        elif arr[i]==0 and arr[i+1]==2:
            arr[i]=1
            arr[i+1]=1
            
    answer = arr.count(1) + arr.count(2) -1
    
    return answer

2020.12.16

2016년

Min : 0.00ms, 10MB
Max : 0.01ms, 10.3MB

def solution(a, b):
    
    day = ["THU","FRI","SAT","SUN","MON","TUE","WED"]
    month = [31,29,31,30,31,30,31,31,30,31,30,31]
    
    s = 0
    
    for i in range(0,a-1):
        s += month[i]
    
    return day[(s+b)%7]

2020.12.16

가운데 글자 가져오기

Min : 0.00ms, 10MB
Max : 0.00ms, 10.2MB

def solution(s):
    answer = s[len(s)//2-1+len(s)%2:len(s)//2+1]
    return answer

2020.12.16

나누어 떨어지는 숫자 배열

Min : 0.01ms, 10MB
Max : 2.88ms, 13.4MB

def solution(arr, divisor):
    answer = []
    
    for n in arr:
        if not n%divisor:
            answer.append(n)
    
    return sorted(answer) if answer else [-1]

2020.12.17

두 정수 사이의 합

Min : 0.00ms, 10.1MB
Max : 319.92ms, 10.2MB

def solution(a, b):
    return sum(range(min(a,b),max(a,b)+1))

2020.12.18

문자열 내 마음대로 정렬하기

Min : 0.00ms, 10.2MB
Max : 0.02ms, 10.2MB

def solution(strings, n):
    return sorted(sorted(strings), key=lambda s:s[n])

2020.12.18

문자열 내림차순으로 배치하기

Min : 0.01ms, 10.2MB
Max : 0.07ms, 10.1MB

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

2020.12.18

문자열 다루기 기본

Min : 0.00ms, 10.1MB
Max : 0.01ms, 10.4MB

def solution(s):
    return s.isdecimal() and len(s)==4 or len(s)==6

2020.12.18

서울에서 김서방 찾기

Min : 0.00ms, 10.1MB
Max : 0.01ms, 10.2MB

def solution(seoul):
    return "김서방은 " + str(seoul.index("Kim")) + "에 있다"

2020.12.18

수박수박수박수박수박수?

Min : 0.00ms, 10.1MB
Max : 0.00ms, 10.2MB

def solution(n):
    return "수박"*(n//2)+"수박"[:n%2]

2020.12.18

문자열을 정수로 바꾸기

Min : 0.01ms, 10.3MB
Max : 0.02ms, 10.4MB

def solution(s):
    return int(s)

2020.12.18

내적

Min : 0.01ms, 10.2MB
Max : 0.18ms, 10.2MB

def solution(a, b):
    answer = 0
    for i in range(len(a)):
        answer += a[i]*b[i]
    return answer

2020.12.18

시저 암호

Min : 0.01ms, 10.1MB
Max : 2.09ms, 10.2MB

def solution(s, n):
    answer = ''
    for x in s:
        y = ord(x)+n
        if x == " ":
            answer += " "
        elif x.islower() and y > 122:
            answer += chr(y-122+96)
        elif x.isupper() and y > 90:
            answer += chr(y-90+64)
        else:
            answer += chr(y)
    return answer

2020.12.21

약수의 합

Min : 0.00ms, 10.2MB
Max : 0.02ms, 10.3MB

def solution(n):
    if n <= 1:
        return n
    
    answer = 1+n
    for i in range(2, int(n**0.5)+1):
        if n%i==0:
            answer += i + n//i
            if i == n//i:
                answer -=i
    return answer

2020.12.21

이상한 문자 만들기

Min : 0.01ms, 10.1MB
Max : 0.04ms, 10.3MB

def solution(s):
    answer = ''
    cnt = 0
    for e in s:
        if e == " ":
            cnt=-1
            answer += " "
        elif cnt%2:
            answer += e.lower()
        else:
            answer += e.upper()
        cnt+=1
    return answer

2020.12.21

자릿수 더하기

Min : 0.00ms, 10.1MB
Max : 0.00ms, 10.2MB

def solution(n):
    answer = 0
    
    while n>9:
        answer += n%10
        n//=10

    return answer+n

2020.12.21

자연수 뒤집어 배열로 만들기

Min : 0.00ms, 10.1MB
Max : 0.00ms, 10.2MB

def solution(n):
    answer = []
    
    while n!=0:
        answer.append(n%10)
        n//=10

    return answer

2020.12.21

정수 내림차순으로 배치하기

sorted 반환값은 리스트이므로 list() 를 사용하지 않아도 된다.

Min : 0.02ms, 10.2MB
Max : 0.03ms, 10.4MB


def solution(n):
#   return int(''.join(sorted(list(str(n)),reverse=True)))
    return int(''.join(sorted(str(n),reverse=True)))

2020.12.21

정수 제곱근 판별

Min : 0.01ms, 10.2MB
Max : 0.02ms, 10.3MB

def solution(n):
    sqrt = n**0.5
    return (sqrt+1)**2 if not sqrt%1 else -1

2020.12.21

제일 작은 수 제거하기

Min : 0.00ms, 10.1MB
Max : 0.96ms, 16.8MB

def solution(arr):
    if arr[0]==10:
        return [-1]
    arr.remove(min(arr))
    return arr

2020.12.21

짝수와 홀수

Min : 0.00ms, 10MB
Max : 0.00ms, 10.3MB

def solution(num):
    return "Odd" if num%2 else "Even"

2020.12.21

최대공약수와 최소공배수

Min : 0.01ms, 10.1MB
Max : 0.16ms, 10.2MB

def solution(n, m):
    x = 0
    
    for i in range(min(n,m),0,-1):
        if not n%i and not m%i:
            x=i
            break
            
    return [x,x*(n/x)*(m/x)]

2020.12.22

콜라츠 추측

Min : 0.00ms, 10.2MB
Max : 0.17ms, 10.3MB

def solution(num):
    cnt = 0
    while num != 1:
        cnt+=1
        if cnt == 500:
            return -1
        if num%2:
            num = num*3 + 1
        else:
            num/=2
        
    return cnt

2020.12.22

평균 구하기

Min : 0.00ms, 10.1MB
Max : 0.01ms, 10.2MB

def solution(arr):
    return sum(arr)/len(arr)

2020.12.22

하샤드 수

Min : 0.00ms, 10.1MB
Max : 0.00ms, 10.3MB

def solution(x):
    xx = x
    sum = 0
    while xx:
        sum+=xx%10
        xx//=10
    
    return True if not x%sum else False

2020.12.22

핸드폰 번호 가리기

Min : 0.00ms, 10.1MB
Max : 0.00ms, 10.3MB

def solution(phone_number):
    return '*'*(len(phone_number)-4)+phone_number[-4:]

2020.12.22

행렬의 덧셈

Min : 0.01ms, 10.2MB
Max : 32.24ms, 22.9MB

def solution(arr1, arr2):
    answer = []
    
    for i in range(len(arr1)):
        arr=[]
        for j in range(len(arr1[i])):
            arr.append(arr1[i][j]+arr2[i][j])
        answer.append(arr)
        
    return answer

2020.12.22

x만큼 간격이 있는 n개의 숫자

Min : 0.00ms, 10.1MB
Max : 0.22ms, 10.4MB

def solution(x, n):
    answer = [x]
    
    for i in range(1,n):
        answer.append(x+x*i)
    
    return answer

2020.12.22

직사각형 별찍기

Min : 12.60ms, 7.55MB
Max : 15.87ms, 7.48MB

a, b = map(int, input().strip().split(' '))

print(('*'*a+'\n')*b)

2020.12.22

신규 아이디 추천

Min : 0.19ms, 10.2MB Max : 0.39ms, 10.2MB

import re

def solution(new_id):
    new_id = new_id.lower()
    new_id = re.sub('[^a-z0-9\-\_\.]','',new_id)
    new_id = re.sub('[\.]+','.',new_id)
    if new_id and new_id[0] == '.':
        new_id=new_id[1:]
    if new_id and new_id[-1] == '.':
        new_id=new_id[:-1]
    if not new_id:
        new_id='a'
    if len(new_id)>=16:
        if new_id[14] == '.':
            new_id=new_id[:14]
        else:
            new_id=new_id[:15]
    elif len(new_id)<=2:
        while len(new_id)!=3:
            new_id+=new_id[-1]
    return new_id

Min : 0.27ms, 10.2MB Max : 0.92ms, 10.2MB

import re

def solution(new_id):
    new_id = new_id.lower()
    new_id = re.sub('[^a-z0-9\-\_\.]','',new_id)
    new_id = re.sub('[\.]+','.',new_id)
    new_id = re.sub('^[.]|[.]$', '', new_id)
    if not new_id:
        new_id='a'
    else:
        new_id=new_id[:15]
    new_id = re.sub('^[.]|[.]$', '', new_id)
    if len(new_id)<=2:
        while len(new_id)!=3:
            new_id+=new_id[-1]
    return new_id

2021.02.19