얼음녹차의 블로그
article thumbnail

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/120887

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음 작성한 코드

  • Range 함수를 이용해 i부터 j까지의 수를 for문을 이용해 차례로 변수 a에 대입
  • Str 함수와 for 문을 이용해 변수 b에 각 자리 숫자를 슬라이싱 하여 대입
  • Str 타입인 b를 다시 int 타입으로 바꾸어 주어 k와 같은지 확인
def solution(i, j, k):
    answer = 0
    for a in range(i, j+1):
        for b in str(a):
            if k == int(b):
                answer += 1
    return answer
    
# 입출력 예시
print(solution(1, 13, 1))
print(solution(10, 50, 5))
print(solution(3, 10, 2))

변수 b를 다시 정수로 바꾸어 주기보다는 k를 문자열로 바꾸는것이 좋을 수도 있겠다.

 

다른 코드

[코드1]

  • Count 함수를 이용하여 i부터 j까지의 수 중 k가 몇번 들어있는지 문자열에서 개수를 센다.
def solution(i, j, k):
    answer = 0
    for n in range(i, j + 1):
        answer += str(n).count(str(k))
    return answer

처음 작성한 코드에서 for문과 if문을 깔끔하게 정리할 수 있는 방법이다.

 

[코드2]

  • [코드1]의 내용을 리스트 컴프리헨션을 이용하여 줄인 방법이다.
def solution(i, j, k):
    answer = sum([ str(i).count(str(k)) for i in range(i,j+1)])
    return answer

변수 answer의 초기값을 설정하지 않아도 되겠지만, 개인적으로는 가독성이 떨어지는 코드라고 생각한다.

 

나의 생각

Count 함수를 조건문 대신 사용함으로 인해 코드가 깔끔해진다는 것을 배우고 가는 문제였다.

profile

얼음녹차의 블로그

@PERIR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!