프로그래머스 Lv.1 가장 가까운 같은 글자

문자열 s가 주어졌을 때,
s의 각 문자가 같은 것이 2개 이상이면
자신과 가장 가까운 곳에 있는 같은 글자의
위치가 자신과 얼마나 차이가 나는지 표현한다.
같은 문자가 없다면 -1로 표현한다.
s | result |
"banana" | [-1, -1, -1, 2, 2, 2] |
"foobar" | [-1, -1, 1, -1, -1, -1] |
** 풀이 방법
s가 banana일 때, 이런 과정으로 풀이된다.
b | -1 |
ba | -1 |
ban | -1 |
bana | a가 인덱스 1에도 있으므로 현재 a의 위치인 3-1=2로 표현 |
banan | n가 인덱스 2에도 있으므로 현재 n의 위치인 4-2=2로 표현 |
banana | 현재 a의 위치-가장 가까운 위치의 a 5-3=2로 표현 |
문자열 s를 문자 하나씩 접근하기 위해
반복문을 돌리고, substring을 사용해 문자 하나씩 쪼갠다.
for(int i=0; i<s.length(); i++) {
String str = s.substring(i,i+1);
...
}
여기서 또 substring을 사용해서 0번 위치부터 현재 위치 전까지 자른다.
그리고, lastIndexOf(str)를 써서 str이 있는 마지막 인덱스를 찾는다.
int idx = s.substring(0,i).lastIndexOf(str);
인덱스를 찾지 못했다면 -1이 리턴되므로
idx가 -1일 때는 answer 배열에도 -1을 저장한다.
인덱스를 찾았다면 현재위치(i) - 같은 문자가 있는 마지막 인덱스 위치
answer배열에 저장한다.
if(idx == -1)
answer[i] = -1;
else
answer[i] = i-idx;
<> 전체 코드 </>
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
for(int i=0; i<s.length(); i++) {
String str = s.substring(i,i+1);
int idx = s.substring(0,i).lastIndexOf(str);
if(idx == -1)
answer[i] = -1;
else
answer[i] = i-idx;
}
return answer;
}
}
반응형
'개발로그 > 알고리즘' 카테고리의 다른 글
프로그래머스 Lv.0 잘라서 배열로 저장하기 (0) | 2023.07.26 |
---|---|
프로그래머스 Lv.0 문자열 겹쳐쓰기 (0) | 2023.07.25 |
프로그래머스 Lv.0 간단한 식 계산하기 (0) | 2023.07.25 |
프로그래머스 Lv.0 세로 읽기 (0) | 2023.07.24 |
프로그래머스 Lv.0 숨어있는 숫자의 덧셈 (2) (0) | 2023.07.24 |
댓글