본문 바로가기
알고리즘 풀이

[알고리즘] 프로그래머스 | 두 정수 사이의 합, 핸드폰 번호 가리기

by 째깍단 2023. 8. 3.

두 정수 사이의 합

https://school.programmers.co.kr/learn/courses/30/lessons/12912

 

답: 

더보기
def solution(a, b):
    answer = 0
    if b > a:
        for num in range(a, b+1):
            answer += num
    else: 
        for num in range(b, a+1):
            answer += num
    return answer

 


너무 펼쳐진 식이라 고민하다가 약간의 변경

def solution(a, b):
    answer = 0
    if a == b:
        return a
    if a > b:
        a, b = b, a    
    for num in range(a, b+1):
        answer += num
    return answer

 

 

문제 분석 및 해석

 

두 정수 a, b

a b포함 사이의 모든 정수의 합을 return

 

a와 b가 같은 경우는 둘 중 아무 수나 리턴

a, b -10,000,000 이상 10,000,000 이하인 정수

 

 


 

핸드폰 번호 가리기

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

 

답:

더보기
def solution(phone_number):
    answer = ''
    answer = "*" * len(phone_number[:-4])
    for i in reversed(range(1,5)):
        answer += phone_number[-i]
    return answer
def solution(phone_number):
    answer = ''
    answer = "*" * len(phone_number[:-4])
    for i in range(4,0,-1):
        answer += phone_number[-i]
    return answer

역 반복문 사용

 

한 줄로 줄이기

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

 

 

문제 분석 및 해석

 

phone_number,

길이 4 이상 20이하인 문자열

뒷 4자리를 제외한 나머지 자리를 *로 만들어서 return하기

 

 

 

❌ 오류 발생 !!

def solution(phone_number):
    answer = ''
    answer = "*" * len(phone_number[:-4])
    for i in range(1,5):
        answer += phone_number[-i] 
		# 여기서 -1 -2 -3 -4대로 넣다보니 거꾸로 넣어지면서 오류가 난 듯
    
    return answer

 



오류를 고쳐보자.


따라서 range를 거꾸로 나오도록 하는 방법을 찾아보았다

큰 숫자부터 작은 숫자 순으로 나오는 것을 역반복문이라고 한다.

 

for i in range(3, 0, -1):
    print("🙂", i)
    # 3번째 인자 -1을 사용할 경우 두번째 인자 -1을 출력

for i in reversed(range(0, 3)):
    print("✨", i)
    # reversed를 사용할 경우 두번째 인자 -1 부터 출력

 

range 함수의 특징 :

두번째 인자에서 -1 뺀 만큼 출력해준다

 

역 반복문에서도 마찬가지로 0 혹은 3이 빠진 형태로 나오는 것을 확인할 수 있었다.

 

 

 

궁금해서 해본 (작은 수, 큰 수, -1)

for i in range(0, 3, -1):
    print("☺️", i)
    # 출력 안됨