TIL

[코테] split 사용하여 여집합 구하기

양죠니 2023. 10. 6. 15:29

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

 

프로그래머스

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

programmers.co.kr

 

매개변수로 주어진 i와 j 사이의 연속된 숫자들 중 k 가 등장한 횟수를 return 하는 문제

 

i가 1이고 j가 13이라고 가정하고, k가 1일때 => 1 ~ 13 중 1은 1, 10, 11, 12, 13 총 6번 등장한다

 

 

1. 연속된 숫자를 배열에다가 다 담는다

let arr = []
for(let a = i; a <= j; a++) {
	arr.push(a)
}

 

2. for문을 다 돌아서 나온 arr를 문자열로 만들기 위해 join 메소드를 사용해준다

let stringArr = arr.join("")

 

3. 2번을 통해 만들어진 stringArr문자열을 for문 돌려서 각 문자가 k와 같으면 answer의 카운트 값을 하나씩 올려준다

for(let i = 0; i < stringArr.length; i++) {
        if(Number(stringArr[i]) === k) {
            answer++;
        }
    }

stringArr의 각 문자의 타입은 string이고 k는 number였기 때문에 타입을 맞춰줘야 했다

 

전체코드

function solution(i, j, k) {
    let answer = 0;
    let arr = []
    for(let a = i; a <= j; a++) {
        arr.push(a)
    }
    let stringArr = arr.join("")
    for(let i = 0; i < stringArr.length; i++) {
        if(Number(stringArr[i]) === k) {
            answer++;
        }
    }
    return answer
}

 

 

다른 사람의 풀이를 봐보니 좀 참고할만한게 있어 긁어옴

function solution(i, j, k) {
    let a ='';
    for(i;i<=j;i++){
        a += i;
    }
    return a.split(k).length-1;
}

i ~ j 까지의 연속된 숫자를 담을 a 변수를 만들어주고 빈 문자열을 초기값으로 부여한다

for문을 돌면서 i ~ j 까지의 숫자를 담은 문자열을 a를 만들고

해당 문자열을 k로 split 메소드를 사용해 분리해준다. 

⭐️ k가 9라고 가정하면 '191'인 경우 9로 분리하면 '1', '1'이고 '19191'이면 '1', '1', '1' 이렇게 9의 개수보다 항상 1이 많아지므로 length 값에서 -1을 해준다.