2023년 02월 09일 목요일 - 오늘 금욜 아니었나..?
오늘 올려볼 문제는 2306번 Naming a Company 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
하드치고는 1트 클
입력
사진에서도 볼 수 있듯이 String 배열이 입력으로 들어온다.
풀이 및 코드
- 두 개의 단어를 고른다.
- 두 개의 단어의 맨 앞글자를 서로 바꾼다.
- 바꾼 단어가 ideas 배열에 둘 다 존재하지 않는다면 valid한 이름이다. (순서 상관있음)
- 이외에는 invalid하다
이 규칙을 따르는 valid한 이름의 개수를 구하는 문제이다.
오늘은 처음부터 정답을 생각해냈다.
맨 앞글자만 서로 바꾸는 것이므로 HashSet 배열을 만들고 맨 앞글자를 index로 해서 뒤에 String 부분을 set에 저장했다.
이 후 모든 쌍에 대해서 교집합만큼 뺀 이후 곱해주고 2를 곱해주면 내가 원하는 값을 찾아낼 수 있었고 이런식으로 문제를 풀었다.
이제 코드를 봐보자!
풀이코드
class Solution {
public long distinctNames(String[] ideas) {
var arr = new HashSet[26];
for(int i = 0; i < arr.length; i++) arr[i] = new HashSet<String>();
for(var idea : ideas) arr[idea.charAt(0) - 'a'].add(idea.substring(1));
long result = 0;
for(int i = 0; i < arr.length - 1; i++) {
for(int j = i + 1; j < arr.length; j++) {
var set = new HashSet<String>();
set.addAll(arr[i]);
set.retainAll(arr[j]);
int retainCnt = set.size();
result += 2 * (arr[i].size() - retainCnt) * (arr[j].size() - retainCnt);
}
}
return result;
}
}
제출 화면
hard 문제인 것 치고는 너무 쉽게 풀어서 놀랐다.
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.
'LeetCode 문제 풀이' 카테고리의 다른 글
[LeetCode] 540번 Single Element in a Sorted Array 문제를 풀어보았다. (ft. java) (0) | 2023.02.21 |
---|---|
[LeetCode] 1523번 Count Odd Numbers in an Interval Range 문제를 풀어보았다. (ft. java) (0) | 2023.02.13 |
[LeetCode] 45번 Jump Game II 문제를 풀어보았다. (ft. java) (0) | 2023.02.09 |
[LeetCode] 904번 Fruit Into Baskets 문제를 풀어보았다. (ft. java) (0) | 2023.02.07 |
[LeetCode] 1470번 Shuffle the Array 문제를 풀어보았다. (ft. java) (0) | 2023.02.07 |