본문 바로가기
개발로그/알고리즘

프로그래머스 Lv.1 가장 가까운 같은 글자

by 쩜징 2023. 7. 25.

프로그래머스 Lv.1 가장 가까운 같은 글자


 

문자열 s가 주어졌을 때, 

s의 각 문자가 같은 것이 2개 이상이면

자신과 가장 가까운 곳에 있는 같은 글자의

위치가 자신과 얼마나 차이가 나는지 표현한다.

같은 문자가 없다면 -1로 표현한다.

s result
"banana" [-1, -1, -1, 2, 2, 2]
"foobar" [-1, -1, 1, -1, -1, -1]

 

** 풀이 방법

 

s가 banana일 때, 이런 과정으로 풀이된다.

b -1
ba -1
ban -1
bana a가 인덱스 1에도 있으므로 현재 a의 위치인 3-1=2로 표현
banan n가 인덱스 2에도 있으므로 현재 n의 위치인 4-2=2로 표현
banana 현재 a의 위치-가장 가까운 위치의 a 5-3=2로 표현

 

문자열 s를 문자 하나씩 접근하기 위해

반복문을 돌리고, substring을 사용해 문자 하나씩 쪼갠다.

for(int i=0; i<s.length(); i++) {
    String str = s.substring(i,i+1);
    ...
}

 

여기서 또 substring을 사용해서 0번 위치부터 현재 위치 전까지 자른다.

그리고, lastIndexOf(str)를 써서 str이 있는 마지막 인덱스를 찾는다.

int idx = s.substring(0,i).lastIndexOf(str);

 

인덱스를 찾지 못했다면 -1이 리턴되므로

idx가 -1일 때는 answer 배열에도 -1을 저장한다.

 

인덱스를 찾았다면 현재위치(i) - 같은 문자가 있는 마지막 인덱스 위치 

answer배열에 저장한다.

if(idx == -1)
    answer[i] = -1;
else 
    answer[i] = i-idx;

 

<> 전체 코드 </>

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        for(int i=0; i<s.length(); i++) {
            String str = s.substring(i,i+1);
            int idx = s.substring(0,i).lastIndexOf(str);
            if(idx == -1)
                answer[i] = -1;
            else 
                answer[i] = i-idx;
        }
        return answer;
    }
}

반응형

댓글