✔ 가장 가까운 같은 글자
문제 분석하기
HashMap에 없을 경우 -1을 배열에 저장한 후 문자열과 문자열의 인덱스를 HashMap에 저장
있을 경우 저장된 인덱스 - 현재 인덱스를 배열에 저장한 후 문자열과 현재 인덱스로 HashMap 갱신
손으로 풀어보기
- 문자열을 하나씩 탐색한 후 HashMap에 문자와 인덱스 저장
- 없을 경우 -1을 배열에 저장한 후, 현재 문자와 인덱스를 HashMap에 저장
- 있을 경우 저장된 인덱스 - 현재 인덱스을 배열에 저장한 후, 현재 인덱스로 HashMap 갱신
- 배열 리턴
슈도코드 작성하기
s(문자열)
map(문자와 인덱스를 담은 hashMap)
for(s만큼) {
if(map에 존재한다면)
for문의 인덱스 - hashMap의 인덱스를 배열에 저장
if(map에 존재하지 않다면)
-1을 배열에 저장
map에 문자와 인덱스 저장(혹은 갱신)
}
배열 리턴
코드 구현하기
/**
* 142086) 가장_가까운_같은_글자
*/
public class L067_142086 {
// s(문자열)
public int[] solution(String s) {
// map(문자와 인덱스를 담은 hashMap)
Map<Character, Integer> map = new HashMap<>();
int[] answer = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
// map에 존재한다면
if (map.containsKey(ch)) {
// for문의 인덱스 - hashMap의 인덱스를 배열에 저장
answer[i] = i - map.get(ch);
}
// map에 존재하지 않다면
else {
// -1을 배열에 저장
answer[i] = -1;
}
// map에 문자와 인덱스 저장(혹은 갱신)
map.put(ch, i);
}
// 배열 리턴
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L067_142086 solution = new L067_142086();
String s = "banana";
int[] result = solution.solution(s);
System.out.println(Arrays.toString(result));
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[12906] 같은 숫자는 싫어 (0) | 2023.10.28 |
---|---|
[1845] 폰켓몬 (0) | 2023.10.27 |
[147355] 크기가 작은 부분문자열 (0) | 2023.10.25 |
[150370] 개인정보 수집 유효기간 (0) | 2023.10.24 |
[155652] 둘만의 암호 (0) | 2023.10.23 |