본문 바로가기
코테연습

176. 가장 가까운 같은 글자 Javascript

by hxunz 2023. 1. 19.

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
    정의된 연산을 수행하는 함수 solution을 완성하라
  • 주어진 자료는 무엇인가?
    문자열 s
  • 조건은 무엇인가?

예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.

따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

2. 계획

  • s를 순회하면서 빈 배열에 알파벳을 넣는다.
  • s[i]가 빈 배열에 이미 있다면 i - 배열에서 s[i]의 마지막 인덱스의 값을 새로운 배열에 넣는다.
  • s[i]가 빈 배열에 없다면 -1을 넣는다.
  • 이를 리턴한다.

3. 실행

const solution = (s) => {
  let index = [];
  let alphabet = [];

  for (let i = 0; i < s.length; i++) {
    if (alphabet.includes(s[i])) {
      index.push(i - alphabet.lastIndexOf(s[i]))
    } else {
      index.push(-1)
    }
    alphabet.push(s[i]);
  }

  return index;
};

test('solution', () => {
  expect(solution("banana")).toEqual([-1, -1, -1, 2, 2, 2]);
});

 

'코테연습' 카테고리의 다른 글

178. 햄버거 만들기 Javascript  (0) 2023.01.20
177. 콜라문제 Javascript  (0) 2023.01.20
176. 과일장수 Javascript  (0) 2023.01.18
175. 스킬트리 Javascript  (0) 2023.01.09
174. 2xn 타일링  (1) 2023.01.09

댓글