본문 바로가기
  • 2025
카테고리 없음

[프로그래머스] 가장 가까운 글자

by soonrang 2023. 10. 20.

문제 설명

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.

예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.

따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.

 

제한사항


  • 1 ≤ s의 길이 ≤ 10,000
    • s은 영어 소문자로만 이루어져 있습니다.

 

 

접근하기


1. s의 현재 인덱스를 구합니다. 

2. i가 j보다 큰 경우 && 인덱스 i번째 문자와 인덱스 j번째 문자가 같은 경우에 

  : i - j 한 값을 반환 

3. 아닌 경우에는 -1 을 반환합니다.

 

 

풀이


class Solution {
        public int[] solution(String s) {
            int[] answer = new int[s.length()];
            int num = -1;
            
            for(int i=0; i<s.length(); i++){
                // s[i] 인덱스 (현재값)
                // arrList > s[i] 문자열과 같은 문자가 있는 위치 List
                for(int j=0; j<s.length(); j++){
                   if(i>j&&s.charAt(i)==s.charAt(j)){
                    num =(i-j);
                   }
                }
                answer[i] = num;
                num = -1;
            }
            return answer;
        }
    }

 

처음에는 arrList를 선언해서 풀어볼까 했는데 굳이 필요없었다. 그래서 지워줬는데 주석은 안지운듯.

어떻게 접근해야할지 주석+한글로 적는 습관을 기르고 있다. 무작정 적는 것도 좋지만 계획을 세우는 방법이 더 좋은 듯하다. (예외사항을 놓칠 확률이 높아서 시간낭비다.) 

 

이 답이 최선이 아닌걸 알지만 내 머릿 속에 있는 문법을 써서 적어냈다. 아마 level 1 중에서 가장 빨리 푼 문제 일듯. 

차근차근 level0 다진게 서서히 나타나나보다. ㅋㅋㅋ 자바의 정석 꾸준히 읽고 우테코 프리코스 열심히 달릴 예정 !

 

오늘도 아자자입니다! 

 

 

우테코 6기를 지원했어요