728x90
이해하기
같은 문자들로 이루어진 것끼리 List를 이루도록 하여 이중 List로 반환하는 문제였다.
예를 들어 strs = {"eat", "tea", "tan", "ate", "nat", "bat"} 라면 {"eat", "tea", "ate"}는 a, e, t로 이루어져 있으므로 하나로 묶는다. 마찬가지로 {"tan", "nat"}을 하나의 리스트로 만들고, {"bat"}은 a, b, t로 이루어진 다른 문자열이 없으므로 홀로 리스트로 만들어진다.
- 각 문자열이 어떤 문자들로 구성되어 있는지 분석한다.
- "eat"를 'e', 'a', 't' 로 쪼개야 한다.
- char 배열로 만들자.
- char 배열을 sort한다.
- 'e', 'a', 't' 도 'a', 'e', 't'
- 't', 'e', 'a' 도 'a', 'e', 't'
- 'a', 't', 'e' 도 'a', 'e', 't'
- sort한 배열을 key 로 만든다. key = "aet"
- map에 추가한다.
- 만약 map.get(key) 가 null 이라면 List 새로 생성
- 만약 map.get(key) 가 null 이 아니라면 있던 List를 받아와서 값 추가
문제풀이
import java.util.*;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> answer = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
int value = 0;
for (int i = 0; i < strs.length; i++) {
String key = "";
char[] charArray = strs[i].toCharArray();
Arrays.sort(charArray);
key = new String(charArray);
if (map.get(key) != null) {
int n = map.get(key);
List<String> target = answer.get(n);
target.add(strs[i]);
answer.set(n, target);
} else {
map.put(key, value++);
List<String> target = new ArrayList<>();
target.add(strs[i]);
answer.add(target);
}
}
return answer;
}
}
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.2] 모음사전 : Java (0) | 2024.03.19 |
---|---|
[Lv.1] 대충 만든 자판 : Java (0) | 2024.03.04 |
[Lv.2] 문자열 압축 : Java (0) | 2024.02.28 |
[Lv.2] 거리두기 확인하기 : Java (0) | 2024.02.28 |
[Bronze_IV] 백준 - 2480. 주사위 세개 : Java (1) | 2024.02.21 |