본문 바로가기
Coding Test

[ Coding test ] 가장 가까운 같은 글자 - Java

by 동토리 2024. 1. 30.

↓ 코딩 테스트 사이트 ↓

코딩테스트 연습 | 프로그래머스 스쿨 (programmers.co.kr)

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

[ 가장 가까운 같은 글자 ]

- 난이도 : Lv.1

 

※ 문제 설명 ※

더보기

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

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

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

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

 

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

 

제한사항

  • 1 <= s의 길이 <= 10,000
    • s는 소문자로만 이루어져있습니다.

 

입출력 예

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

 

 

↓ Java 코드 ↓

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

문자열 s의 길이만큼 answer라는 배열을 선언한 후 첫 번째 문자는 이전에 동일한 문자가 있을 수 없으므로 -1로 해두었다.

첫 번째 for 문에서는 두 번째 문자부터 마지막 문자까지 돌면서 현재 문자 이전에 나타난 동일한 문자를 찾고, 두 번째 for문에서는 역순으로 돈다.

cd에 이전 문자 위치를 대입하고 현재 문자와 이전에 있던 문자가 같은 경우 거리를 계산하여 answer 배열에 저장한다.

마지막으로 역순으로 돌던 for문이 0번째 자리에 올 때까지 동일한 문자가 없었다면 -1로 저장한다.

 

 

 

 

-- 느낀 점 --

오랜만에 하려니까 뇌가 딱딱해져서 오래 걸렸당 자주하겠습니다

댓글