
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
문제 풀이
순서도 인지하고 있어야 하는 문제라고 판단하여 HashMap을 사용하였다.
문자열 s의 i번째 문자가 map에 똑같은 문자가 존재하면 지금 인덱스에서 똑같은 문자가 있는 위치를 빼 몇번째 칸에 있는지 계산 한다. 몇번째 칸에 있는지를 answer에 담아서 반환한다.
코드
public int[] solution(String s) {
int[] answer = new int[s.length()];
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (map.containsKey(ch)) {
answer[i] = i - map.get(ch);
} else {
answer[i] = -1;
}
map.put(ch, i);
}
return answer;
}