반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/120887
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
숫자 i에서 j까지 하나씩 돌면서 k가 숫자에 들어간 개수를 더한 값을 반환하는 문제
🧠 나의 접근 방식과 시행착오
4분 걸린 문제. 일단 한 숫자에 k가 포함된 count를 계산하는 함수를 따로 빼서 정리하였다. (보통 하나의 함수 안에서 처리를 하려고 하면 코드가 정리가 안되거나 실수가 나오기 쉬워서 이런 문제의 유형에서는 자주 활용하는 편) 그 이후에는 그저 i부터 j까지 돌면서 더하기만 해주면 된다.
/// <summary>
/// k의 개수
/// https://school.programmers.co.kr/learn/courses/30/lessons/120887
/// </summary>
public int solution(int i, int j, int k)
{
int sumCount = 0;
for (int t = i; t <= j; t++)
{
sumCount += GetCount(t, k);
}
return sumCount;
}
public int GetCount(int num, int t)
{
const int MulNum = 10;
int count = 0;
while (num > 0)
{
if (num % MulNum == t)
{
count++;
}
num /= MulNum;
}
return count;
}
✅ 풀이 코드
피드백으로 나온 점은 굳이 상수를 선언해서까지 할 필요는 없다는 점과 함수의 이름이 좀더 의도를 알 수 있는 CountDigitOccurence와 같은 이름으로 바꾸거나 하는 것이다. 추가로 숫자를 스트링으로 바꾼 후 Linq의 Count를 써서 해결을 하는 방법도 있으나 문자열 변환 비용 등을 고려하면 별로 좋아 보이진 않음.
public int solution(int i, int j, int k)
{
int count = 0;
for (int n = i; n <= j; n++)
{
count += n.ToString().Count(c => c == k.ToString()[0]);
}
return count;
}
🔄 정리
함수를 따로 분리한다는 점이 해당 문제에서는 생각할 점이라는 생각이 든다. 그리고 뭔가 반복적으로 연산이 일어나는 부분이 있긴 할건데 이 부분을 좀 더 개선할 수도 있을까란 생각은 든다. 다만 뭐 레벨 0인 문제라 그 정도까지 생각은 애매한 듯도..
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.2] 최솟값 만들기 [프로그래머스_코딩테스트] [정렬, 그리디] [25분] (0) | 2025.07.04 |
---|---|
[Lv.0] 숨어있는 숫자의 덧셈 (1) [프로그래머스_코딩테스트] [문자열, 수학] [10분] (1) | 2025.07.04 |
[Lv.1] 행렬의 덧셈 [프로그래머스_코딩테스트] [2차원 배열] [20분] (0) | 2025.07.03 |
[Lv.1] x만큼 간격이 있는 n개의 숫자 [프로그래머스_코딩테스트] [수학] [10분] (0) | 2025.07.03 |
[Lv.1] 하샤드 수 [프로그래머스_코딩테스트] [수학] [10분] (0) | 2025.07.01 |