728x90
프로그래머스 Level 1 가장 가까운 같은 글자 JAVA 풀이
문자열 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 을 보고 바로 indexOf 함수가 떠올라 이를 활용해서 구현해야겠다는 생각이 들었다.
지문 중에서는 가장 가까운 곳의 위치를 물어봤기때문에 lastIndexOf 함수를 사용했고, 현재 위치와의 거리를 물어봤으므로 현재 위치에서 해당 위치를 빼면 되었다.
int[] result = new int [s.length()];
String compare = "";
for(int i=0 ; i< s.length(); i++){
int index = compare.lastIndexOf(s.substring(i,i+1));
if(index== -1){
result[i] = -1;
}else{
result[i] = i- index;
}
compare +=s.substring(i,i+1);
}
다른사람 풀이
HashMap의 getOrDefault를 이용해 해결 한 풀이가 가장 인상깊었다.
getOrDefault를 이용함으로써 if문을 사용하지도 않고도 데이터 일치 여부를 판단해 한 라인으로 코드를 구성 할 수 있었다.
-1의 값은 i보다 1보다 큰값으로 default를 정해놔 데이터가 존재하지 않으면 -1을 return하도록 구성되어 있다.
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;
getOrDefault를 이용하지 않아도 HashMap의 중복되는 key값은 overwrite가 된다는 점을 활용해서도 많이들 푼 것 같다.
int[] answer = new int[s.length()];
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0; i<s.length(); i++) {
if(!map.containsKey(s.charAt(i))) {
answer[i] = -1;
map.put(s.charAt(i), i);
}else {
int before = map.get(s.charAt(i));
answer[i] = i - before;
map.put(s.charAt(i), i);
}
}
728x90
'코테 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 Level1 과일 장수 문제 풀이 (0) | 2023.04.25 |
---|---|
[JAVA] 프로그래머스 Level1 덫칠하기 문제 풀이 (0) | 2023.04.20 |
[JAVA] 프로그래머스 Level1 - 추억 점수 문제 풀이 (0) | 2023.04.19 |
[JAVA] 프로그래머스 Level 1 - 옹알이(2) 풀이 과정 (0) | 2023.02.22 |
[JAVA] 프로그래머스 Level1 푸드 파이트 대회 풀이 (0) | 2023.02.22 |