Programmers/JAVA
[ 프로그래머스 ] 가장 가까운 같은 글자 - Java
giggs
2023. 1. 13. 16:08
1. 문제 설명
2. 문제 풀이 핵심이라 생각하는 점
- 가장 가까운 곳에 있는 같은 글자의 index 찾기.
- indexOf(String Value, FromIndex)로 처음 나오는 인덱스의 다음부터 찾기 시도 -> 중복 여러 개면 체크 불가능
- lastIndexOf(String Value, ToIndex)로 체크 해보려고 함 -> ToIndex라서 0 나옴
- StringBuilder를 활용해서 풀이해 보기로 생각
- 해당 문자 이어 주기 전의 lastIndex와 현재 StringBuilder의 length를 활용하여 계산
- sb.length() - sb.lastIndexOf(check);
3. 정답 코드 확인 및 활용 메소드 체크
3-1 : 정답 코드 확인
import java.util.*;
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
StringBuilder sb = new StringBuilder();
String check = "";
for (int i = 0; i < s.length(); i++) {
//lastIndexOf() 메서드의 파라미터로 String값을 넣어주기위해 형 변환
check = String.valueOf(s.charAt(i));
//포함여부 체크 겸 인덱스 체크하기 위한 조건식
if(sb.lastIndexOf(check) == -1) {
answer[i] = -1;
}else {
answer[i] = sb.length() - sb.lastIndexOf(check);
}
//체크했으면 해당 문자열 이어주기
sb = sb.append(check);
}
return answer;
}
}
4. 공부하고 싶은 다른 분의 풀이
- 풀이 방법은 비슷하다. 포함하고있지 않다면 -1,
- 포함하고 있다면 length - 해당문자 index
- HashMap을 이용하여 풀이한 것을 체크하려고 선정
- map.containsKey()
- map.get()
- map.put()
import java.util.*;
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0; i<s.length(); i++) {
if(!map.containsKey(s.charAt(i))) {
answer[i] = -1;
map.put(s.charAt(i), i);
}else {
int before = map.get(s.charAt(i));
answer[i] = i - before;
map.put(s.charAt(i), i);
}
}
return answer;
}
}