Dev/Algorithm

[프로그래머스] 가장 가까운 같은 글자 - Java

VIPeveloper 2024. 5. 22. 15:21
728x90
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

 

생각

  • 이중포문으로 간단하게 풀었다.
// 1. s를 순회하며
// 2. 역순으로 순회함
// 3. -1까지 도달했다면 -1 리턴
// 4. 이전이라면 같은지 비교해서 차이 리턴

코드

public class Main {
    public static void main(String[] args) {
        System.out.println(solution("banana")); // 2
        System.out.println(solution("foobar")); // 2
    }
    public static int[] solution(String s) {
        int[] answer = new int[s.length()];
        // 1. s를 순회하며
        for (int i = 0; i < s.length(); i++) {
            char c = s.toCharArray()[i];
            // 2. 역순으로 순회함
            for (int j = i-1; j >= -1 ; j--) {
                // 3. -1까지 도달했다면 -1 리턴
                if(j==-1) {
                    answer[i] = -1;
                    continue;
                }
                char c1 = s.charAt(j);
                // 4. 이전이라면 같은지 비교해서 차이 리턴
                if(c == c1){
                    answer[i] = i-j;
                    break;
                }
            }
        }
        return answer;
    }
}

다른 사람 풀이

  • 해시를 사용하였고, 계속 갱신되며 idx 를 최신화하며 삽입하는 로직인 것 같음
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        System.out.println(solution("banana")); // 2
        System.out.println(solution("foobar")); // 2
    }
    public static 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;
    }
}
728x90
반응형