문제 풀이/프로그래머스 알고리즘

가장 가까운 같은 글자

열심히 해 2024. 10. 17. 21:28

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

 

for 문을 돌려서 문자가 같은지 비교하며 같을 때 둘의 인덱스의 차를 리스트에 넣어야겠다고 생각했습니다.

 

그런데 문제의 요구사항을 충족하기 위해서는 역순으로 접근해야 했습니다.

 

요구사항에 따르면 앞에 같은 문자가 있을 때 뒤의 문자가 영향을 받기 때문입니다

 

역순으로 생각한다면 뒤에 같은 문자가 있을 때 앞에 문자가 영향을 받게 됩니다.

 

즉 자주 쓰는 방식으로 for(int i = 0; i < ; i++) 문을 작성하기 위해 역순으로 접근한 것입니다.

 

정답 : 

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public List<Integer> solution(String s) {
        List<Integer> answer = new ArrayList<>();

        List<Character> characters = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            characters.add(s.charAt(i));
        }
        Collections.reverse(characters);

        for (int i = 0; i < characters.size(); i++) {
            boolean found = false;
            for (int j = i+1; j < characters.size(); j++) {
                if (characters.get(i).equals(characters.get(j))) {
                    answer.add(j-i);
                    found = true;
                    break;
                }
            }
            if(!found) {
                answer.add(-1);
            }
        }

        Collections.reverse(answer);
        return answer;
    }
}