k의 개수

2024. 9. 2. 18:00코딩테스트 입문

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

 

프로그래머스

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

programmers.co.kr


문제 설명
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 ijk가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ i < j ≤ 100,000
  • 0 ≤ k ≤ 9

입출력 예

i j k result
1 13 1 6
10 50 5 5
3 10 2 0

입출력 예 설명
입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.

입출력 예 #3

  • 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.

범위 i ~ j까지 중에서 k가 몇 번을 등장하는지 찾는 문제입니다.

 

이런 문제는 전부 찾는 게 무식해보여도 제일 효율적인 방법이죠.

파이썬으로 반복문을 구성해서 문자를 풀어보겠습니다.

def solution(i, j, k):
    numbers = sum([str(n).count(str(k)) for n in range(i, j + 1)])
    return numbers

 

우선 i부터 j까지의 범위에 있는 숫자들을 가져오기 위해 range 함수를 사용해서 숫자들을 만듭니다.

만든 숫자들은 하나씩 비교해야 하므로 전부 문자형으로 교체하고, k 역시 문자형으로 교체해 n 안에 몇 개가 들어있는지 count합니다.

count한 리스트가 완성된다면 그 합을 구해서 반환하면 됩니다.

 

조금 더 풀어쓴다면 다음과 같습니다.

def solution(i, j, k):
    # i부터 j까지 n을 문자형으로 저장합니다.
    numbers = [str(n) for n in range(i, j + 1)]
    # 한 자리 숫자들로 기록하기 위한 num 리스트
    num = []
    # 모든 n에 대해서 num에 각 숫자를 추가합니다.
    for n in numbers:
        num.extend(list(n))
    # 추가된 숫자들에서 k가 몇 개인지를 찾습니다.
    return num.count(str(k))

 

숫자들을 문자로 분리해서 센다는 것만 알면 되는 문제입니다.

'코딩테스트 입문' 카테고리의 다른 글

삼각형의 완성조건 (1)  (0) 2024.09.04
중복된 문자 제거  (0) 2024.09.03
A로 B 만들기  (0) 2024.09.01
이진수 더하기  (0) 2024.08.31
치킨 쿠폰  (0) 2024.08.30