문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 접근법
-문자열중 나왔던 문자 있는지 있다면 몇번째전에 나왔는지 체크하기
문제 풀이법
hashmap을 이용해서 각문자열 위치를 저장하는 방법
또는 그냥 문자열 꺼꾸로 돌려서 역순으로 앞에 몇번째가 있는지 찾는방법
중 후자를 선택함 전자는 대략적으로 방법만 생각나서 일단 후자로 채점받음
코드
public static List<Integer> solution(String s) {
List<Integer> answer = new ArrayList<>();
String reversed = new StringBuilder(s)
.reverse()
.toString();
char[] strings= reversed.toCharArray();
for(int i =0;i<strings.length;i++){
for(int ii=i+1;ii<strings.length;ii++){
if(strings[ii]==strings[i]){
answer.add(ii-i);
break;
}else if(strings.length-1==ii){
answer.add(-1);
}
}
}
answer.add(-1);
Collections.reverse(answer);
return answer;
}
결과

gpt 피드백
hashmap을 이용해서 이중포문없이 풀수 있다고 조언함
동감하였고 다시 한번 풀어보기로함
public static List<Integer> solution(String s) {
List<Integer> answer = new ArrayList<>();
HashMap<Character, Integer> temp = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (temp.containsKey(c)) {
answer.add(i - temp.get(c));
} else {
answer.add(-1);
}
temp.put(c, i);
}
return answer;
}
맵에 문자열 마지막 번호 넣어놓고
현재 인덱스를 뺴면 이전 문자와 거리가 바로나오고
끝까지가도 동일 문자가 없으면 그냥 -1로 끝남
'코테 > lvl1' 카테고리의 다른 글
| 프로그래머스 소수만들기(lvl1) 풀어보기 (0) | 2026.09.07 |
|---|---|
| 프로그래머스 모의고사(lvl1) 풀어보기 (0) | 2026.09.07 |
| 프로그래머스 K번째수(lvl1) 풀어보기 (0) | 2026.09.07 |
| 프로그래머스 같은숫자는 싫어(lvl1) 풀어보기 (0) | 2026.09.07 |
| 프로그래머스 포켓몬(lvl 1) 풀어보기 (0) | 2026.09.07 |