프로그래머스 1단계 - 가장 가까운 같은 글자 본문
반응형
1 단계 : 가장 가까운 같은 글자
코딩테스트 연습 > 연습문제 > 가장 가까운 같은 글자
문제 설명
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
- b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
- n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
- a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s은 영어 소문자로만 이루어져 있습니다.
입출력 예
s | result |
---|---|
"banana" | [-1, -1, -1, 2, 2, 2] |
입출력 예 설명
입출력 예 #1
지문과 같습니다.
반응형
코드
function solution(s) {
const basic = Array.from(Array(s.length), x => -1);
for(let i = 0; i < s.length; i++) {
let count = s.indexOf(s[i])
if(count !== i) {
for(let j = 0; j < i; j++) {
count = s.indexOf(s[i], j);
if(count === i) {
count = s.indexOf(s[i], j -1);
break;
}
}
basic[i] = i - count;
}
}
return basic;
}
리뷰
순서는 다음과 같다
1. 반환할 배열을 만듭니다. 원소의 갯수만큼 -1이 담겨있겠죠?
2. count는 본인을 배열에서 찾습니다. 그런데 만약 count가 현재 인덱스가 아니다? 그러면
3. 내 앞에 같은 누군가가 있는거겠죠? 그런데 이게 2번 이상나올 수 있으니까 반복문을 타줬습니다.
4. 0번째부터 본인 인덱스 전까지 indexOf를 돌릴건데 만약 본인을 찾았다면 본인 전까지가 본인과 같은 문자가 있는 인덱스 입니다.
5. 예를들어 banana면 2번째 for문을 안돌면 마지막 a는 첫번째 a에 걸리게 되어서 4가 되는데 원하는바는 2잖아요?
6. 그래서 indexOf('a', [0,1,2,3 ....]) 이렇게 해나가는데 4가 되는순간 본인을 찾아버리겠죠?
7. 그러면 j의 -1 한 값인 3부터 찾으면 원하는 a를 찾아낼 수 있고 거기서부터의 거리를 잴 수 있겠죠?
총평 : 점수를 별로 안주네요 ㅠㅠ
반응형
'알고리즘 > 1단계' 카테고리의 다른 글
프로그래머스 1단계 - 개인정보 수집 유효기간 (0) | 2023.02.15 |
---|---|
프로그래머스 1단계 - 크기가 작은 부분 문자열 (0) | 2023.02.13 |
프로그래머스 1단계 - 문자열 나누기 (3) | 2022.12.06 |
프로그래머스 1단계 - 명예의 전당 (1) (6) | 2022.11.28 |
프로그래머스 1단계 - 과일 장수 (4) | 2022.11.10 |
Comments