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;
    }
}