From 8e01ea50a6b42ae9227a05a12641e96d230ce9ad Mon Sep 17 00:00:00 2001 From: YE H Date: Fri, 9 Dec 2022 16:14:34 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98=EB=A8=B8?= =?UTF-8?q?=EC=8A=A4=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [가장 가까운 같은 글자](https://school.programmers.co.kr/learn/courses/30/lessons/133502) --- 221209/solution/README.md | 19 +++++++++++++++++++ 221209/solution/Solution.test.js | 27 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 221209/solution/README.md create mode 100644 221209/solution/Solution.test.js diff --git a/221209/solution/README.md b/221209/solution/README.md new file mode 100644 index 0000000..7fa2701 --- /dev/null +++ b/221209/solution/README.md @@ -0,0 +1,19 @@ +# 문제 + +- [가장 가까운 같은 글자](https://school.programmers.co.kr/learn/courses/30/lessons/133502) + +## 1. 원하는 것 +- s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자를 찾아라. + +## 2. 아는 것 +- 문자열 s + +## 3. 조건 +- 글자들을 왼쪽부터 오른쪽을 읽어 나가면서 진행한다. +- 그러니까 앞에 이미 나온 글자가 나왔을 때, 그 둘의 간격을 구한다. +- 예를 들면 s="banana"일 때, 처음 나왔기때문에 자신의 앞에 같은 글자가 없다. -1로 표현. +- 그 뒤에 나온 두번째 a는 두칸 앞에 a가 있기 때문에 2로 표현한다. +- 마지막 a도 두번째로 나온 a가 전에 나왔으면서 더 가까이 있기 때문에 그걸 기준으로 순자를 센다. +- 그렇게 된다면 결과물은 [-1, -1, -1, 2, 2, 2]가 된다. + +## 4. 계획 diff --git a/221209/solution/Solution.test.js b/221209/solution/Solution.test.js new file mode 100644 index 0000000..2ca9fce --- /dev/null +++ b/221209/solution/Solution.test.js @@ -0,0 +1,27 @@ +function solution(s) { + const preWords = []; + const result = []; + + for (let i = 0; i < s.length; i += 1) { + let count = 0; + + if (!preWords.includes(s[i])) { + preWords.push(s[i]); + result.push(-1); + continue; + } + + for (let j = i - 1; j >= 0; j--) { + count++; + if (s[i] === s[j]) { + result.push(count); + break; + } + } + } + return result; +} + +test('solution', () => { + expect(solution('banana')).toEqual([-1, -1, -1, 2, 2, 2]); +});