Algorithm/CodingTest

[Programmers] Level.1 가장 가까운 같은 글자 (Java)

누구세연 2023. 10. 27. 00:36

https://school.programmers.co.kr/learn/courses/30/lessons/142086

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

가장 가까운 같은 글자 Java로 문제 풀이하겠습니다.

문제 설명

이 문제는 문자열을 순회하면서 각 문자의 인덱스를 기록하고, 각 문자에 대해 가장 가까운 동일한 문자의 인덱스를 찾아야 합니다.

 

저는 다음과 같이 풀이하였습니다.

import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;

class Solution {
    public int[] solution(String s) {
        int[] result = new int[s.length()];
        Arrays.fill(result, -1);
        
        Map<Character, Integer> map = new HashMap<>();
        
        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            if(map.containsKey(c)) {
                int prevIndex = map.get(c);
                result[i] = i -prevIndex;
            }
            map.put(c, i);
        }
        return result;
    }
}

 

  1. 결과를 저장할 배열 result를 생성하고 Arrays의 fill 함수를 사용해서 모든 요소를 초기값 -1로 설정합니다.
  2. 문자와 해당 문자의 인덱스를 매핑하기 위한 map을 초기화합니다.
  3. 문자열을 반복문을 돌면서 각 문자의 인덱스를 확인합니다.
    - 만약 map에 문자가 이미 존재한다면, 이전에 등장한 해당 문자의 인덱스를 가져옵니다.
       그리고 result 배열에 현재 인덱스에서 이전 인덱스를 뺀 값을 저장합니다.
       이 값은 현재 문자와 가장 가까운 동일한 문자까지의 거리입니다.
    - 현재 문자와 인덱스를 map에 추가합니다.
  4. 마지막으로 result 배열을 반환합니다.

저는 해당 문제에서 HashMap이라는 자료구조를 활용해서 문제를 풀이하였습니다.

HashMap은 key-value 쌍의 집합으로 이루어진 자료구조로 key를 value에 매핑하여 효율적인 데이터 접근을 가능하게 합니다.

이 문제에서는 문자열의 각 문자와 해당 문자의 인덱스를 매핑하기 위해 HashMap을 사용했습니다.

문자열을 순회하면서 각 문자의 인덱스를 기록하는 과정에서, 이미 등장한 문자인지를 확인하고 해당 문자의 인덱스를 가져와야 합니다.

이때 HashMap을 사용하여 문자와 해당 문자의 인덱스를 효율적으로 매핑하여 빠른 접근을 가능하게 했습니다.

 

다른 이견이 있으시다면 자유롭게 댓글 남겨주세요.