[LeetCode] Shortest Distance to Target String in a Circular Array

아르당·2026년 9월 17일

LeetCode

목록 보기
533/571
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

인덱스가 0부터 시작하는 인덱스를 가진 원형 문자열 배열 words와 문자열 target이 주어진다. 원형 배열이란 배열의 끝이 다시 배열의 시작 부분과 연결되는 구조를 의미한다.

  • 엄밀히 말해, words[i]의 다음 요소는 words[(i + 1) % n]이고 이전 요소는 words[(i - 1 + n) % n]이다. 여기서 n은 words의 길이이다.

startIndex에서 시작해서 한 번에 한 단계씩 다음 단어 또는 이전 단어로 이동할 수 있다.
문자열 target에 도달하는 데 필요한 최단 거리를 반환해라. 만약 words에 target이 존재하지 않는다면 -1을 반환해라.

Example

#1
Input: words = ["hello", "i", "am", "leetcode", "hello"], target = "hello", startIndex = 1
Output: 1
Explanation: 인덱스가 1부터 시작해서 "hello"에 도달할 수 있다.

  • 오른쪽으로 3칸 이동해서 인덱스 4에 도달한다.
  • 왼쪽으로 2칸 이동해서 인덱스 4에 도달한다.
  • 오른쪽으로 4칸 이동해서 인덱스 0에 도달한다.
  • 왼쪽으로 1칸 이동해서 인덱스 0에 도달한다.

"hello"에 도달하는 가장 짧은 거리는 1이다.

#2
Input: words = ["a", "b", "leetcode"], target = "leetcode", startIndex = 0
Output: 1
Explanation: 인덱스가 0부터 시작해서 "leetcode"에 도달할 수 있다.

  • 오른쪽으로 2칸 이동해서 인덱스 2에 도달한다.
  • 왼쪽으로 1칸 이동해서 인덱스 2에 도달한다.

"leetcode"에 도달하는 가장 짧은 거리는 1이다.

#3
Input: words = ["i", "eat", "leetcode"], target = "ate", startIndex = 0
Output: -1
Explanation: words에서 "ate"가 존재하지 않아서, -1을 반환한다.

Constraints

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i]와 target은 영어 소문자로만 구성된다.
  • 0 <= startIndex < words.length

Solved

class Solution {
    public int closestTarget(String[] words, String target, int startIndex) {
        int min = Integer.MAX_VALUE;
        int n = words.length;

        for(int i = 0; i < n; i++){
            if(words[i].equals(target)){
                int diff = Math.abs(startIndex - i);
                int dist = Math.min(diff, n - diff);
                min = Math.min(min, dist);
            }
        }

        return min == Integer.MAX_VALUE ? -1 : min;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글