↓ 코딩 테스트 사이트 ↓
코딩테스트 연습 | 프로그래머스 스쿨 (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로 저장한다.
-- 느낀 점 --
오랜만에 하려니까 뇌가 딱딱해져서 오래 걸렸당 자주하겠습니다
'Coding Test' 카테고리의 다른 글
[ Coding test ] 서울에서 김서방 찾기 - Java (0) | 2024.01.30 |
---|---|
[ Coding test ] 가운데 글자 가져오기 (Python) (0) | 2023.02.25 |
[ Coding test ] 폰켓몬 (Python) (4) | 2023.02.25 |
[ Coding test ] 가장 가까운 같은 글자 (Python) (0) | 2023.02.25 |
[ Coding test ] 기사단원의 무기 (Python) (2) | 2023.02.23 |
댓글