[문자열 요약하기]

G_NooN·2024년 1월 3일
0

Algorithms

목록 보기
5/33

문제 설명

알파벳으로 구성된 strings의 알파벳 종류와 개수를 요약해서 출력하는 Solution 함수를 완성하라.

제한 조건

  1. strings는 소문자 알파벳으로 이루어져 있다.
  2. strings는 오름차순으로 정렬되어 있다. (ex. abccd)
  3. 각 알파벳은 중복이 가능하다.

입출력 예시

입력값출력값
abca1/b1/c1
aaabbbca3/b3/c1
ahhhhza1/h4/z1
acccdeeea1/c3/d1/e3

해결 방법

  1. 문자열의 길이, 알파벳의 count 횟수를 변수로 선언한다.
  2. 반복문을 사용하여 0번째 ~ (n-2)번째 까지의 문자를 순회한다.
    • 현재 위치의 문자와 다음 위치의 문자가 같은 경우
      - 현재 위치에서 count 횟수++
    • 현재 위치의 문자와 다음 위치의 문자가 다른 경우
      - 현재 위치에서 count 횟수++
      - 요약된 내용을 출력 문자열에 추가
      - count 횟수 초기화
  3. 마지막(n-1)번째 문자의 요약된 내용을 출력 문자열에 추가한다.
  4. 결과를 출력한다.

코드

function solution(strings) {
  let answer = "";	 // 결과 문자열
  let n = strings.length; // 문자열의 길이
  let count = 0; 	// 알파벳 count 횟수

  // 0 ~ n-2까지 반복 실행
  for (let i = 0; i < n - 1; i++) {
    // i번째 문자와 i+1번째 문자가 같은 경우
    if (strings[i] === strings[i + 1]) {
      count++;
    } else {
      // i번째 문자와 i+1번째 문자가 같지 않은 경우
      count++;
      answer += strings[i] + String(count) + "/"; // 요약된 내용 출력 문자열에 추가
      count = 0; // count 초기화
    }
  }

  // 마지막(n-1)번째 문자의 요약된 내용 출력 문자열에 추가
  count++;
  answer += strings[n - 1] + String(count);

  // 결과 출력
  return answer;
}

시행착오

초기 접근 방법

  1. 알파벳(a-z)만큼의 길이를 가지는 알파벳 개수 count 배열을 생성한다.
  2. strings를 순회하며 알파벳에 해당하는 문자를 발견하면 count 배열의 해당 위치의 요소를 ++
  3. count 배열에서 0이 아닌 요소만 따로 배열로 생성한다.
  4. 해당 배열을 요약해서 출력한다.

개선점

  • 반복 횟수
    - 초기 접근 방식은 전체 문자열을 여러 번 순회하는 방법으로, 동작하는 시간이 상대적으로 길었다.
    - 하지만, 개선된 방식은 전체 문자열을 한 번만 순회하여 동작 시간을 단축하였다.
  • 코드의 가독성
    - 초기 접근 방식은 알파벳을 모두 검색하기 때문에 index에 접근할 때 charCodeAt을 사용하여 코드의 가독성이 떨어졌다.
    - 하지만, 개선된 방식은 알파벳을 모두 검색할 필요 없이, index의 문자 간의 동일 여부만 파악하기 때문에 가독성이 좋다.
profile
쥐눈(Jin Hoon)

0개의 댓글