티스토리 뷰

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

 

프로그래머스

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

programmers.co.kr

 


 

function solution(s) {
    const answer = []
    const obj = { str: s[0], o: 0, x: 0 }
    let temp = ""

    for(let i = 0; i < s.length; i++) {
        const curS = s[i]
        temp += curS
        obj.str === curS ? obj.o += 1 : obj.x += 1

        if(obj.o === obj.x) {
            answer.push(temp)
            temp = ""
            obj.str = s[i + 1]
            obj.o = 0
            obj.x = 0
        }
    }

    obj.o > obj.x && answer.push(temp)
    return answer.length
}
  1. 비교할 문자(str), 비교할 문자와 같은 문자의 개수(o), 다른 문자의 개수(x)를 담을 obj 객체 만듦
  2. 분리할 문자열 temp 만듦
  3. 주어진 s의 길이만큼 반복
    1. temp에 현재 문자(s[i]) 더함
    2. 비교할 문자(obj.str)와 현재 문자(s[i]) 비교
      1. 같으면 obj.o, 다르면 obj.x 값에 +1
    3. 두 횟수(obj.o, obj.x)가 같으면 문자열(temp) 분리 및 초기화
      1.  answer에 분리할 문자열(temp)을 push
      2. 다음 문자를 비교할 문자(obj.str)에 담음
      3. 두 횟수(obj.o, obj.x) 0으로 초기화
  4. 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없을 경우 (반복문이 종료되었는데도 obj.o가 큰 상태)
    temp가 빈 문자열이 아닐 것 -> answer에 temp를 push
  5. answer의 길이를 반환

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함