[프로그래머스] Lv1. 문자열나누기

Jenny·2023년 1월 25일
0

ProblemSolving

목록 보기
1/14
post-thumbnail

문제

https://school.programmers.co.kr/learn/courses/30/lessons/140108?language=javascript#

해결

function solution(s) {
    let stack = [];
    let answer = 0;
    
    for(let i = 0; i < s.length; i ++){
    stack.push(s[i]);
    
    const same = stack.filter((item) => item === stack[0]);
    const notsame = stack.filter((item) => item !== stack[0]);
    
    if(same.length === notsame.length){
        answer += 1;
        stack = [];
    }
}
    
    if(stack.length !== 0) {
        answer +=1;
    }
    return answer;
}

과정

초반

  1. 문자열 s를 배열에 저장
  2. 배열의 0번째 인덱스를 기준으로
  3. 배열을 순회하면서
  4. 0번째 인덱스와 같으면 -> 배열1(same)에 저장
    다르면 -> 배열2(notsame)에 저장
  5. 배열1과 배열2의 길이가 같으면 answer 증가

고민한 것

  • 5번 조건의 위치를 어디에 놔야할지 몰랐음
  • 마지막 남은 문자열 처리를 어떻게 해야할 지 몰랐음

놓친 것

  • 0번째 인덱스 이후 첫 번째 문자가 계속 바뀐다는 것

알게된 것

  • filter 메소드 / 정리
  • ==과 ===의 차이 / 정리

다른 해결(참고)

function solution(s) {
    let isX = [s[0],0]
    let isNotX = ''
    const result = []
    for(let i = 0 ; i < s.length ; i ++) {
        // X 가 이번 글자인지 처리
        if(isX[0] === s[i]) isX[1]++
        else isNotX+=s[i]
        // X와 X가 아닌 글자들의 수가 같다면
        if(isX[1] === isNotX.length) {
            // 정답 배열에 추가 및 초기화
            result.push(isX[0]+isNotX)
            isX = [s[i+1],0]
            isNotX = ''
        }
    }
    // X가 남았다면 정답 배열에 추가
    if(isX[0]) result.push(isX[0])
    return result.length
}
  • object
profile
Developer로의 여정

0개의 댓글