문제 설명
문자열 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은 영어 소문자로만 이루어져 있습니다.
접근하기
1. s의 현재 인덱스를 구합니다.
2. i가 j보다 큰 경우 && 인덱스 i번째 문자와 인덱스 j번째 문자가 같은 경우에
: i - j 한 값을 반환
3. 아닌 경우에는 -1 을 반환합니다.
풀이
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
int num = -1;
for(int i=0; i<s.length(); i++){
// s[i] 인덱스 (현재값)
// arrList > s[i] 문자열과 같은 문자가 있는 위치 List
for(int j=0; j<s.length(); j++){
if(i>j&&s.charAt(i)==s.charAt(j)){
num =(i-j);
}
}
answer[i] = num;
num = -1;
}
return answer;
}
}
처음에는 arrList를 선언해서 풀어볼까 했는데 굳이 필요없었다. 그래서 지워줬는데 주석은 안지운듯.
어떻게 접근해야할지 주석+한글로 적는 습관을 기르고 있다. 무작정 적는 것도 좋지만 계획을 세우는 방법이 더 좋은 듯하다. (예외사항을 놓칠 확률이 높아서 시간낭비다.)
이 답이 최선이 아닌걸 알지만 내 머릿 속에 있는 문법을 써서 적어냈다. 아마 level 1 중에서 가장 빨리 푼 문제 일듯.
차근차근 level0 다진게 서서히 나타나나보다. ㅋㅋㅋ 자바의 정석 꾸준히 읽고 우테코 프리코스 열심히 달릴 예정 !
오늘도 아자자입니다!