ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 1단계] 문자열 나누기
    카테고리 없음 2024. 3. 4. 08:16

    ❓문제 설명

    • 문자열 s가 주어진다.
    • 첫 글자를 읽고 이 첫 글자와 다른 글자가 나온 횟수를 셉니다.(첫 글자와 같은 문자라면 첫 글자 횟수 up)
    • 두 횟수가 같아지는 순간 문자열을 자릅니다.
    • 최종적으로 문자열의 개수를 return하면 됩니다.

     

    ✅ 문제 해결

    • 문자열을 자르기 위해서는 글자의 수를 세야하므로 count가 필요하고 그 count와 비교할 또 다른 count가 있어야하고 문자열 비교하기 위해서 객체를 사용하면 어떨까 싶음
    • 객체를 사용해서 문자열: 횟수 형태로 저장한 후 문자열이 잘리면 객체를 초기화하는 것임!
    • 객체를 만들어서 객체가 가진 values 배열을 출력하는 것까지는 문제가 없었으나 마지막으로 values를 비교해서 같은 값이 있을 때 초기화 하는 방법이 구현이 잘 안됬음.
    function solution(s) {
        var answer = 0;
        const obj1 = {}
        const array1 = [...s]
        array1.forEach((a)=>{
            if (obj1[a]) {
                obj1[a] ++
            } else {
                obj1[a] = 1
            }
            // 여기부분에서 막히네 Object.values(obj1).reduce((a, b)=> , false)
        })
        console.log(obj1)
        
        return answer;
    }
    • 이후 방법을 찾다가 객체를 이용할 필요가 없이 특정 변수에 +- 하는 식으로 계산을 한다는 것을 알게되었음

    🔥 인상 깊은 남의 풀이

    function solution(s) {
        var x = 0;
        var x_count = 0;
        var result = [];
        
        for(i = 0; i < s.length; i++){
            if(s[i] === s[x]) x_count++;
            else x_count--;  
            if(x_count === 0) {
                result.push(s.substring(x,i+1))
                x = i+1;
            }
        }
        return result.join('').length === s.length ? result.length : result.length+1;
    }
    • 마지막 return문에서 삼항연산자가 쓰이는 이유는 딱 떨어졌을 때와 아닐 때에는 1개의 갯수 차이가 있기에 주는 것임
      ex) banana의 경우 문자열이 3개이고 count도 0으로 떨어지지만 banan의 경우 count가 1이고 문자열은 3이다 그렇기에 마지막 count가 0이 아니므로 3으로 맞추기 위해서는 1을 더해주어야 함

    ❕느낀점

    • 무조건적으로 모든 데이터를 저장하려 하지말고 현재 중요한 내용에 대해서 파악을 할 수 있는 자세가 필요하다고 느낌
    • slice를 이용해서 나는 문제를 풀었지만 substring이라는 문법도 있다는 것을 알게되었음
    • 이와 같은 문제가 나오면 객체를 먼저 떠올리는데 좀 더 유연성을 기를 필요가 있다 느낌

    댓글

Designed by Tistory.