컴퓨터가 고장나는 바람에 한 4일동안 코테를 풀지 못했다.. 밀린 코테들을 호다닥 풀어보려고 한다.
가장 가까운 같은 글자
사용언어 : Java
난이도 : Lv.1
문제 설명
문자열 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은 영어 소문자로만 이루어져 있습니다.
입출력 예
풀이
우선 각 글자를 배열로 만들어서 자신의 글자부터 시작해서 하나씩 인덱스를 줄여가면서 본인 글자가 있으면 해당 인덱스를 출력하는 방식으로 풀기로 했다. 근데 풀고나서 느낀건데 인덱스를 출력하는게 아니라 자신의 위치에서 얼마나 멀리있는지 출력하는건데 변수 이름 선택을 잘못 설정한 것 같다 ㅎㅎ
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
String[] S = s.split("");
for(int i = 0; i < S.length; i++) {
int idx = -1;
if (i == 0) {
answer[i] = -1;
continue;
}
for(int j = i - 1; j >= 0; j--) {
if(S[i].equals(S[j])) {
idx = i - j;
break;
}
}
answer[i] = idx;
}
return answer;
}
}

푸는거 자체는 어렵진 않았으나 다른 사람들의 코드를 보니 HashMap을 이용해서 더욱 짧게 구현을 했더라..! 아직 반복문과 조건문을 사용하는 거에만 익숙해져 있어서 다른 함수들 응용을 잘 하지 못하는 거 같아서 좀 아쉽다. 더 많이 공부해서 다른 함수들도 잘 응용할 수 있도록 해야겠다!
'알고리즘' 카테고리의 다른 글
[Java] 프로그래머스 코딩테스트 입문 Day 10 (0) | 2023.01.17 |
---|---|
[Java] 프로그래머스 코딩테스트 입문 Day 9 (1) | 2023.01.06 |
[Java] 프로그래머스 코딩테스트 입문 Day 8 (3) | 2022.12.29 |
[Java] 프로그래머스 코딩테스트 연습 - 크기가 같은 부분 문자열 (0) | 2022.12.23 |
[Java] 프로그래머스 코딩테스트 입문 Day 7 (1) | 2022.12.23 |