문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120887
답안1 ( 이중 for문 )
function solution(i, j, k) {
let answer = 0
let str = ""
for (i; i <= j; i++) {
str += i
}
for (const char of str) {
if (char == k) {
answer += 1
}
}
return answer
}
- 그냥 단순히 k가 몇 개인지 찾는 문제이기 때문에 받는 숫자 모두를 문자열화 해주어도 된다.
- i는 j보다 항상 같거나 작음을 이용하여 for문의 종료조건을 만들어준다.
- i부터 j까지 해당하는 숫자의 문자열 모음이 완성된다면
- for문을 한번 더 사용하여 k와 str의 각 엘리먼트가 일치하는지 찾아서
일치한다면 answer를 1씩 올려준다. - 이후 리턴한다.
답안2 ( split )
function solution(i, j, k) {
let str = ""
for (i; i <= j; i++) {
str += i
}
return str.split(k).length - 1
}
- i부터 j까지의 숫자들을 문자열화 하는 것 까지는 같다.
- split을 사용하는 것이 좀 다른데,
만약, "191".split(9)인 상태라면 9를 기준으로 split되어 ( ["1", "1"]이 되어 ) length가 2가 되고,
"19191".split(9)라면 ["1", "1", "1"] 이 되어 length가 3이 된다. - 즉, k로 잘라내는 것에 비례하여 length가 결정되는데,
예를들어 k가 문자열에 3개가 있다면 length가 4가 된다.
따라서 str.split(k).length에서 1을 빼준 후 리턴한다.
답안3 ( 메서드 체이닝 )
function solution(i, j, k) {
return Array(j - i + 1).fill(i).map((v, i) => v + i).join("").split("").filter(v => v == k).length
}
- Array() 를 통해 빈 어레이를 만들 수 있다.
- 만약 i가 8이고 j가 15라는 가정하에
- Array는 8, 9, 10, 11, 12, 13, 14, 15 (8개 엘리먼트)를 담아야 한다.
- 이 때 15 - 8은 7이므로 Array(15 - 8)을 한다면 Array(7)이 되어 7개 엘리먼트만 담을 수 있게 된다.
- 따라서 +1 을 해준다. - 이 후 Array의 모든 엘리먼트에 fill 메서드를 이용하여 초기값(i)로 모두 채워준다.
- map 메서드를 Array의 엘리먼트를 인덱스만큼 증가시킨다.
- 이후 join 메서드로 문자열로 만든 뒤,
- 문자열을 전부 배열로 쪼개기 위해 split("") 메서드를 이용한다.
- 이후 filter 메서드를 이용하여 엘리먼트가 k와 일치하는 값을 뽑은 후 length를 리턴한다.
'코테 문제 풀이' 카테고리의 다른 글
[백준 3052] 나머지 (Node.js) (0) | 2023.01.27 |
---|---|
[백준 1000] A + B (Node.js) (0) | 2023.01.13 |
[레벨 0] 팩토리얼 (헬퍼함수, while) (0) | 2023.01.10 |
[레벨 0] A로 B 만들기 (배열 정렬 후 join으로 문자열화) (0) | 2023.01.10 |
[레벨 0] 중복된 문자 제거 (object, Set) (0) | 2023.01.10 |