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

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

by skysline 2023. 2. 22.
반응형

`가장 가까운 같은 글자`

문제 설명

문자열 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을 완성해주세요.

입출력 예


java code

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        answer[0] = -1;
        for(int i=0; i<s.length(); i++){
           int x =  s.lastIndexOf(s.substring(i,i+1),i-1);
            if(x!=-1){
                answer[i] = i-x;
            }else answer[i] = x;
        }
        return answer;
    }
}
  1. s 문자열 길이만큼의 크기를 갖는 answer 배열을 선언합니다.
    • 이 배열은 결과값을 저장하기 위한 용도로 사용됩니다.
  2. answer 배열의 첫 번째 원소를 -1로 초기화합니다.
    • 첫 번째 문자는 이전에 등장한 위치가 없기 때문에, -1로 초기화됩니다.
  3. 문자열 s를 처음부터 끝까지 반복하면서 각 문자의 이전에 등장한 위치와의 차이를 계산합니다.
    • lastIndexOf 함수를 사용하여 현재 문자 이전에 등장한 가장 마지막 위치를 찾습니다.
      • 이때, s.substring(i, i+1)을 사용하여 현재 위치의 문자를 추출합니다.
      • lastIndexOf 함수는 해당 문자를 찾을 수 없는 경우 -1을 반환합니다.
    • 만약 이전에 등장한 위치가 있다면, answer 배열에 현재 위치와 이전 위치의 차이를 저장합니다.
    • 이전에 등장한 위치가 없다면, answer 배열에 -1을 저장합니다.
  4. 모든 문자에 대한 계산이 완료된 answer 배열을 반환합니다.

python code

def solution(s):
    answer = [-1] * len(s) # answer 리스트를 -1로 초기화합니다.
    for i in range(len(s)):
        x = s.rfind(s[i], 0, i) # 현재 문자 이전에 등장한 가장 마지막 위치를 찾습니다.
        if x != -1: # 이전에 등장한 위치가 있다면,
            answer[i] = i - x # 현재 위치와 이전 위치의 차이를 계산하여 answer 리스트에 저장합니다.
    return answer

 

위 코드에서 rfrid 함수는 lastIndexOf 함수와 유사하게 동작합니다. s.rfind(s[i], 0, i)는 현재 위치 이전에 등장한 문자 s[i]의 가장 마지막 위치를 찾습니다. answer 리스트를 -1로 초기화한 이유는 첫 번째 문자는 이전에 등장한 위치가 없기 때문 입니다. 초기값으로 -1을 설정하여 이를 구분할수 있도록 합니다.

 

반응형

댓글