2.4 배열의 회전
📌 Problem
- 문자열 리스트가 주어지는데 리스트에 있는 문자열을 검사하여 서로 같은 애너그램을 가지는 문자열을 그룹으로 묶기
- Example 1: Input: strs = ["a"] Output: [["a"]]
- Example 2: Input: strs = [""] Output: [[""]]
- Example 3: Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
Constraints:
- 리스트에 있는 모든 문자열은 소문자로 구성
- 문자열 리스트
📝Solution
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> list = new ArrayList<List<String>>();
Map<String, Integer> map = new HashMap();
int q =0;
for (int i =0; i<strs.length;i++) {
char[] chrArray = strs[i].toCharArray();
Arrays.sort(chrArray);
String key = new String(chrArray);
if(map.get(key)==null) {
// 키가 없을 때 리스트 추가
map.put(key,q++);
ArrayList<String> l = new ArrayList<>();
l.add(strs[i]);
list.add(l);
}else {
// 키가 있을때 map의 value(인덱스) 가져와서 리스트 추가
int n = map.get(key);
List<String> li = list.get(n);
li.add(strs[i]);
}
}
return list;
}
}
- 해시테이블 생성
- key는 문자열 value 는 리스트의 index
- 입력 문자열 리스트를 순회
- 문자열 정렬
- 정렬된 문자열 검사하여 key가 있으면 리스트 인덱스 가져와서 리스트 추가
- key가없으면 리스트 새로 추가
'Programming > algorism' 카테고리의 다른 글
백준 1966번- 프린터 큐(JAVA) (0) | 2022.02.22 |
---|---|
배열의 회전 (쓰면서 익히는 알고리즘 자료구조 p.91) (0) | 2021.11.07 |
파스칼의 삼각형 (쓰면서 익히는 알고리즘 자료구조) (0) | 2021.10.31 |
배열에서 삽입 위치 찾기 (쓰면서 익히는 알고리즘 자료구조) (0) | 2021.10.23 |