728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/142086
생각
- 이중포문으로 간단하게 풀었다.
// 1. s를 순회하며
// 2. 역순으로 순회함
// 3. -1까지 도달했다면 -1 리턴
// 4. 이전이라면 같은지 비교해서 차이 리턴
코드
public class Main {
public static void main(String[] args) {
System.out.println(solution("banana")); // 2
System.out.println(solution("foobar")); // 2
}
public static int[] solution(String s) {
int[] answer = new int[s.length()];
// 1. s를 순회하며
for (int i = 0; i < s.length(); i++) {
char c = s.toCharArray()[i];
// 2. 역순으로 순회함
for (int j = i-1; j >= -1 ; j--) {
// 3. -1까지 도달했다면 -1 리턴
if(j==-1) {
answer[i] = -1;
continue;
}
char c1 = s.charAt(j);
// 4. 이전이라면 같은지 비교해서 차이 리턴
if(c == c1){
answer[i] = i-j;
break;
}
}
}
return answer;
}
}
다른 사람 풀이
- 해시를 사용하였고, 계속 갱신되며 idx 를 최신화하며 삽입하는 로직인 것 같음
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
System.out.println(solution("banana")); // 2
System.out.println(solution("foobar")); // 2
}
public static int[] solution(String s) {
int[] answer = new int[s.length()];
HashMap<Character,Integer> map = new HashMap<>();
for(int i=0; i<s.length();i++){
char ch = s.charAt(i);
answer[i] = i-map.getOrDefault(ch,i+1);
map.put(ch,i);
}
return answer;
}
}
728x90
반응형
'Dev > Algorithm' 카테고리의 다른 글
[프로그래머스] 과일 장수 - Java (0) | 2024.05.24 |
---|---|
[프로그래머스] 기사단원의 무기 - Java (0) | 2024.05.23 |
[프로그래머스] 크기가 작은 부분 문자열 - Java (0) | 2024.05.21 |
[프로그래머스] 문자열 나누기 - Java (0) | 2024.05.21 |
[프로그래머스] 둘만의 암호 - Java (0) | 2024.05.21 |