Welcome! Everything is fine.

[프로그래머스/Lv.1] 가장 가까운 같은 글자 - Java 본문

프로그래머스/Lv.1

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

개발곰발 2024. 4. 11.
728x90

📌 문제

 

프로그래머스

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

programmers.co.kr

📌 풀이

문자열 s를 처음부터 돌면서 앞에서 자신과 가까운 글자가 얼마나 가까이 있는지 구한 후 그 결과를 반환하는 문제이다.

 

내가 작성한 코드를 정리하자면 다음과 같다.

  • 문자열 s를 한 글자씩 char형 배열에 저장한다.
  • 이중 for문으로 문자 배열을 돈다.
  • 처음 나온 글자인 경우
    • arr[i]와 arr[j]가 다를 경우 -1을 배열에 저장한다. 
  • 앞에 나온 글자인 경우
    • arr[i]와 arr[j]가 같을 경우 몇 칸 앞에서 나왔는지 구한 후(현재 인덱스 - 앞 인덱스) 그 결과를 배열에 저장한다.

📌 전체 코드

이것도 검색으로 힌트를 얻어 푼 코드인데, 프로그래머스에서 다른 사람들의 풀이를 보니 더 쉽고 깔끔하게 짠 코드들이 많았다..!

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        char[] arr = new char[s.length()];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = s.charAt(i);
        }
        answer[0] = -1;
        for (int i = 1; i < arr.length; i++) {
            for (int j = i-1; j >= 0; j--) {
                if (arr[i] == arr[j]) {
                    answer[i] = i - j;
                    break;
                } else answer[i] = -1;
            }
        }
        return answer;
    }
}

📌 다른 코드

다음은 다른 사람들이 작성한 코드 중 하나이다. HashMap을 쓸 생각은 못했는데 getOrDefault()로 간결하게 구현한 걸 보고 또 한 번 배웠다. getOrDefault() 함수는 찾는 key가 map에 존재한다면 해당 key의 value를 반환하고, 찾는 key가 map에 존재하지 않는다면 default값을 반환하는 함수이다. 여기서는 default값으로 i + 1을 지정해 map에 key가 존재하지 않을 경우(= 처음 나온 글자인 경우) -1을 map에 저장하도록 한다.

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