코테/lvl1

프로그래머스 가장가까운글자(lvl1) 풀어보기

디비드킴 2026. 9. 7. 11:12

   문제링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 접근법

-문자열중 나왔던 문자 있는지 있다면 몇번째전에 나왔는지 체크하기


문제 풀이법

hashmap을 이용해서 각문자열 위치를 저장하는 방법 

또는 그냥 문자열 꺼꾸로 돌려서 역순으로 앞에 몇번째가 있는지 찾는방법

중 후자를 선택함 전자는 대략적으로 방법만 생각나서 일단 후자로 채점받음


코드

public static List<Integer>  solution(String s) {

        List<Integer> answer = new ArrayList<>();

        String reversed = new StringBuilder(s)

        .reverse()

        .toString();

        char[] strings= reversed.toCharArray();

        for(int i =0;i<strings.length;i++){

            for(int ii=i+1;ii<strings.length;ii++){

               if(strings[ii]==strings[i]){

                 answer.add(ii-i);

                  break;

               }else if(strings.length-1==ii){

                 answer.add(-1);

               }

            }

        }

        answer.add(-1);

         Collections.reverse(answer);

        return answer;

    }


결과

 



gpt 피드백

hashmap을 이용해서 이중포문없이  풀수 있다고 조언함

동감하였고 다시 한번 풀어보기로함

public static List<Integer> solution(String s) {

    List<Integer> answer = new ArrayList<>();

    HashMap<Character, Integer> temp = new HashMap<>();

 

    for (int i = 0; i < s.length(); i++) {

        char c = s.charAt(i);

        if (temp.containsKey(c)) {

            answer.add(i - temp.get(c));

        } else {

            answer.add(-1);

        }

        temp.put(c, i);

    }

 

    return answer;

}

맵에 문자열 마지막 번호 넣어놓고

현재 인덱스를 뺴면 이전 문자와 거리가 바로나오고

끝까지가도 동일 문자가 없으면 그냥 -1로 끝남


배운점
될거 같으면  해보자