가장 가까운 같은 글자 (자바)

김재현·2023년 11월 17일
0

알고리즘 풀이

목록 보기
20/90
post-thumbnail

문제

정답 코드

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        for(int i=0;i<s.length();i++) {
            answer[i]=-1;
        }

        for (int i=0;i<s.length();i++) {
            for (int j=i+1; j<s.length();j++) {
                if (s.charAt(i) == s.charAt(j)) {
                    answer[j]=j-i;
                }
            }
        }
        return answer;
    }
}

처음에 헤쉬맵을 써서 키-밸류 로 풀어봐야겠다고 생각했으나,
풀다가 보니 굳이..? 라는 생각이 들게되었다.

answer을 미리 -1로 초기화 해놓고,
이중 for문을 돌려서 중복되는 값이 생기면, answer[j]에 i와j의 차이만큼을 answer로 바로 넣어주면 되겠구나 싶었다.

간단!

다른 정답 코드

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++){
            char ch = s.charAt(i);
            answer[i] = i-map.getOrDefault(ch,i+1);
            map.put(ch,i);
        }
        return answer;
    }
}

getOrDefault

이렇게 헤쉬맵을 사용했다면 getOrDefault 을 사용하면 된다는 것을 알았다.

getOrDefault: 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
getOrDefault(Object key, V DefaultValue)

answer[i] = i-map.getOrDefault(ch,i+1); 를 설명해보자면

중복되는 단어라면 answer[i]에는 이미 들어있던 value와 i 만큼의 차이가 삽입되어야하니까,
i-value --> i - map.get(ch)

중복이 안된다면 디폴트로 -1이 들어가야 하니까,
i-x = -1 --> x=i+1

profile
I live in Seoul, Korea, Handsome

0개의 댓글