[프로그래머스 레벨 1] 문제풀이 모음 python (1)

mauz·2022년 6월 18일
0

🐒 전화번호 가리기

https://programmers.co.kr/learn/courses/30/lessons/12948

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

뒤에서 네 자리까지만 숫자로 나타내고,
뒤에서 네 자리 앞에 있는 숫자들을 *로 바꾼다.
두 문자열을 합치면 문제에서 요구하는대로 전화번호를 가린 문자열을 나타낼 수 있다.


🐒 최소 직사각형

https://programmers.co.kr/learn/courses/30/lessons/86491

def solution(sizes):
    # 객체 정렬
    maxw,maxh = 0,0	#짧은쪽 긴쪽 최대값 저장할 변수 선언
    for size in sizes:	# sizes 파라미터를 돌면서
        size.sort()	# 오름차순 정렬이므로 [짧은쪽, 긴쪽]으로 정렬
        maxw = max(size[0],maxw)
        maxh = max(size[1],maxh)
		#리스트 돌면서 최대값 저장
        
    return maxw * maxh	# 문제에서 요구하는 넓이 리턴

일단 직사각형이라면 가로나 세로중 한 쪽이 클것이다.

명함은 눕혀도 되고 세워도 된다.

따라서 가로세로 구분을 하지않고 길쭉한 쪽과 짧은 쪽만이 존재한다고 생각한다.

모든 명함이 들어가야 한다.

길쭉한 쪽에서의 최댓값과 짧은 쪽에서의 최댓값에 맞게 지갑을 만들면 눕히던지 세우던지 해서 모두 들어갈 수 있다.


🐒 부족한 금액 계산하기

https://programmers.co.kr/learn/courses/30/lessons/82612#

def solution(price, money, count):
    cost = 0	# 놀이기구를 count번 타기위해 내야하는 총 비용을 저장할 변수 선언
    for i in range(1,count+1):	# 1부터 count까지
        cost += price * i	# count 변수에 비용 더해서 저장
        
    if cost > money:	# 만약 총 비용이 내가 가진 돈보다 크다면
        return cost - money # 비용 - 내가 가진돈 리턴
    else:	# 그렇지 않다면
        return 0

🐒 같은 숫자는 싫어

https://programmers.co.kr/learn/courses/30/lessons/12906

def solution(arr):
    answer = []	#숫자를 담을 리스트 선언
    last = -1	# 마지막으로 넣었던 숫자를 저장하는 변수 선언
	    		# 기본값이 -1 인 이유는 arr의 요소들이 0 이상의 정수이기 때문
    
    for i in arr:	# arr 리스트를 돌면서
        if i == last:	# 지금 보는 숫자 i가 마지막으로 넣었던 숫자랑 같다면
            continue	# 다음으로 넘어감
        answer.append(i)	# 아니라면 숫자 i를 answer에 담아줌	
        last = i 	# 마지막으로 담은 숫자를 i 로 저장
            
    return answer

🐒 나누어 떨어지는 숫자 배열

https://programmers.co.kr/learn/courses/30/lessons/12910

def solution(arr, divisor):
    answer = []		# 나누어 떨어지는 숫자들을 담을 배열 선언
    
    for i in arr:	# arr을 돌면서
        if i % divisor == 0:	# i가 divisor로 나눈 나머지가 0 이라면
            answer.append(i)	# answer 리스트에 추가
            
    if not answer:	# answer 리스트가 비어있다면
        return [-1]	# 조건에 따라서 [-1] 리턴
    
    return sorted(answer)	# 아니라면 answer을 정렬해서 리턴

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

https://programmers.co.kr/learn/courses/30/lessons/12917

def solution(s):
    s = [i for i in s]	#문자열 s를 문자 하나하나를 요소로하는 리스트로 만들기
    s.sort(reverse = True)	# 내림차순으로 정렬
    	# 아스키코드에서 대문자가 소문자보자 작음
    return ''.join(s)	# join함수를 이용해서 리스트 s 요소들을 공백없이 붙여서 문자열로 바꿔줌

🐒 시저 암호

https://programmers.co.kr/learn/courses/30/lessons/12926

def solution(s, n):
    answer = ''
    
    for i in s:
        if 'A' <= i <= 'Z':	# i 가 대문자 알파벳이면
            if ord(i) + n <= ord('Z'):	# i를 아스키코드에서 오른쪽으로 n칸 옮겨도 'Z'보다 같거나 작으면
                answer += chr(ord(i)+n)	# answer 문자열에 chr 함수를 통해 아스키코드를 문자열로 바꾸어서 추가
            else:	# i를 오른쪽으로 n칸 옮겼더니 'Z'를 넘으면
                answer += chr(ord(i)+n - ord('Z') + ord('A')-1) # Z에서 초과한 만큼을 A에서 시작시킴
        elif 'a' <= i <= 'z': # i 가 소문자 알파벳이면
            if ord(i) + n <= ord('z'):
                answer += chr(ord(i)+n)
            else:
                answer += chr(ord(i)+n - ord('z') + ord('a')-1)
        else:	# i가 공백이면
            answer += ' '	# answer에 공백 추가
                
    return answer

🐒 이상한 문자 만들기

https://programmers.co.kr/learn/courses/30/lessons/12930#

def solution(s):
    answer = ''		# 빈 문자열 선언
    idx = 0		# 인덱스 선언
    
    for val in s:	# 문자열 s를 돌면서
        if val.isalpha():	# 지금 보는 문자가 알파벳이면
            if idx%2 == 0: # 현재 짝수 인덱스라면
                answer += val.upper()	# 대문자로 변환
            else:	# 홀수 인덱스라면
                answer += val.lower()	# 소문자로 변환
            idx += 1	# 인덱스 증가
        else:	# 지금 보는 문자가 공백문자라면
            answer += ' '	# 공백 추가
            idx = 0	# 인덱스 0으로 초기화
                
    return answer
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

위 제한사항을 따라, 공백문자(스페이스바) 가 나올때마다 인덱스를 0으로 초기화 해줘야한다.


🐒 자릿수 더하기

https://programmers.co.kr/learn/courses/30/lessons/12931

def solution(n):
    answer = 0
    n = str(n)	# 정수 n을 문자열로 변환
    for i in n: 	# 문자열 n 을 돌면서
        answer += int(i)	# 각 문자 i를 정수로 변환하여 더함

    return answer
profile
쥐구멍에 볕드는 날

0개의 댓글