문제
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. 2중 for문을 통해 글자를 찾는다
2. 가까운 글자를 찾으면 break 시켜주고 현재 인덱스에서 찾은 인덱스를 빼 answer 배열에 넣는다.
3. 글자를 찾지 못하면 -1을 answer 배열에 넣는다.
코드
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
boolean find = false;
for(int j=i-1; j>=0; j--){
if(ch==s.charAt(j)){ //가까운 같은 글자가 있는 경우
answer[i] = i-j;
find = true;
break;
}
}
if(!find){ //가까운 같은 글자가 없는 경우
answer[i]=-1;
}
}
return answer;
}
}
찾으면 break를 시켜주지만 아무래도 2중 for문이라서 시간 복잡도 효율이 좋지 않다.
HashMap을 통해 푸는게 훨씬 효율이 좋을 것이다.
다른사람 풀이 코드
import java.util.Map;
import java.util.HashMap;
class Solution {
public int[] solution(String s) {
// 결과를 담을 배열 선언
int[] answer = new int[s.length()];
// s의 문자와 index를 담을 map 선언
Map<Character, Integer> map = new HashMap<>();
// s의 길이만큼 반복
for (int i = 0; i < s.length(); i++) {
// 해당 문자가 map에 없다면 -1
if (!map.containsKey(s.charAt(i))) {
answer[i] = -1;
map.put(s.charAt(i), i);
} else {
// 해당 문자가 map에 존재하면 i - 이전 문자의 인덱스
answer[i] = i - map.get(s.charAt(i));
map.put(s.charAt(i), i);
}
}
return answer;
}
}
'Algorithm (PS) > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 1] 콜라 문제 (Java) (0) | 2023.08.29 |
---|---|
[프로그래머스 Level 1] 푸드 파이트 대회 (Java) (0) | 2023.08.29 |
[프로그래머스 Level 1] 두 개 뽑아서 더하기(Java) (0) | 2023.08.28 |
[프로그래머스 Level 1] K번째수(Java) (0) | 2023.08.26 |
[프로그래머스 Level 1] 문자열 내 마음대로 정렬하기(Java) (0) | 2023.08.26 |