1. 🌊 k의 개수 - Lv.0
1.0.1. 🐤 문제 설명
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
1.0.2. 🐣 제한사항
- 1 ≤ i < j ≤ 100,000
- 0 ≤ k ≤ 9
1.0.3. 🐥 입출력 예
i | j | k | result |
1 | 13 | 1 | 6 |
10 | 50 | 5 | 5 |
3 | 10 | 2 | 0 |
1.0.4. 🐋 입출력 예 설명
입출력 예 #1
- 본문과 동일합니다.
입출력 예 #2
- 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.
입출력 예 #3
- 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.
1.0.5. 🐳 나의 풀이
첫 풀이시 i를 i~j에 k가 있기만 하면 true를 반환하는 if문을 만들어 result 값을 1씩 올려주었지만, 이렇게 하면 오답이 출력된다.
<javascript />
const solution = (i, j, k) => {
// input i, j, k
// for문을 돌리기?
let result = 0;
for (let num = i; num <= j; num++) {
if (String(num).includes(String(k))) {
result++;
}
}
return result;
};
let output = solution(1, 13, 1);
console.log(output); // 5
output = solution(10, 50, 5);
console.log(output); // 5
output = solution(3, 10, 2);
console.log(output); // 0
문제가 요구는 i, j, k가 각 1, 13, 1일 경우 1, 10, 11, 12, 13 총 5개가 아닌 11을 십의 자리와 일의 자리를 각각 세어줘야 한다.
그래서 문자를 split('')로 분리하여 중첩 for문을 돌려주어 해결했다.
<javascript />
const solution = (i, j, k) => {
// input i, j, k
// for문을 돌리기
let result = 0;
for (let num = i; num <= j; num++) {
const split = String(num).split('');
for (let num2 = 0; num2 < split.length; num2++) {
if (split[num2].includes(String(k))) {
result++;
}
}
}
return result;
}
1.0.6. 🐬 다른 사람의 풀이
<javascript />
function solution(i, j, k) {
let a ='';
for(i;i<=j;i++){
a += i;
}
return a.split(k).length-1;
}
너무 간단하게 푼 다른 분의 풀이를 분석해보자.
for문에 늘 let i = 0
을 적어 for문 내부에서 변수를 할당해주었는데 부모에게서 받아온 변수를 그대로 써도 된다..
문자열 a에 i부터 j까지의 모든 수를 추가하고 k로 split한 후 length - 1을 출력하는 것이 굉장히 깔끔해 보인다.
1.0.7. 🦄 알아보기
조금 더 가독성 있는 방법을 고민해볼 것.
'🐣 STUDY > Algorithm' 카테고리의 다른 글
🌊 [javascript] 이진탐색 (0) | 2023.05.04 |
---|---|
🌊 [javascript] 프로그래머스 - 중복된 숫자 개수 (2) | 2023.03.14 |
🌊 [javascript] 프로그래머스 - 점의 위치 구하기 (2) | 2023.03.13 |
🌊 [javascript] 프로그래머스 - 중앙값 구하기 (0) | 2023.03.11 |