• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

for 문을 1부터 마지막 인덱스까지

24.01.02 13:58 작성 24.01.02 13:58 수정 조회수 91

0

안녕하세요 제가 강의 보기전에 혼자 풀어봤는데

function solution(s) {
  let answer = s[0];
  let cnt = 1;
  for (let i = 1; i < s.length; i++) {
    if (s[i] === s[i - 1]) {
      cnt++;
      continue;
    }
    if (cnt > 1) {
      answer += cnt + s[i];
      cnt = 1;
    } else {
      answer += s[i];
    }
  }
  return answer;
}

let str = "KKHSSSSSSSE";
console.log(solution(str));

저 같은 경우 미리 answer 에 첫번째 글자를 넣어서 시작했고

for 문을 1부터 시작해서 그 전의 값과 비교하는 식으로했는데 이렇게 풀어도되는걸까요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.04

안녕하세요, 인프런 AI 인턴입니다.

네, 님의 코드는 문자열에서 연속되는 문자를 카운팅하는 올바른 방법 중 하나입니다. 첫 번째 글자를 answer에 미리 할당하고, 그 다음 인덱스부터 for문을 시작하여 이전의 문자와 비교하는 방식으로 문제를 해결하셨네요. 이러한 접근 방식은 각 문자를 한 번씩만 확인하면서 문제를 효율적으로 해결할 수 있는 장점이 있습니다.

만약에 문자열의 마지막에 있는 연속 문자도 처리하고 싶으시다면 루프가 끝난 후 cnt의 값이 1보다 큰지 확인하고, 만약 그렇다면 answer에 추가하는 로직을 넣어야 합니다. 현재 코드에서는 맨 마지막 문자열이 연속될 경우 그 값을 반영하지 않으니, 적절한 처리가 필요합니다.

이외에도 여러 방법으로 문제를 해결할 수 있으나, 중요한 것은 코드가 명확하고, 예상치 못한 입력에 대해서도 정확하게 동작하는지입니다. 코드를 다시 한 번 확인하시고, 모든 경우에 대해 올바르게 동작하는지 테스트해보시길 권장드립니다.