개발자 도전기
[국비지원] 30일차 - Number of Good Pairs(leetCode) 본문
같은 값의 요소를 가진 인덱스를 쌍으로 반환하고 그 쌍의 갯수를 구하는 문제이다.
오늘 배운 Map 컬렉션을 활용하기 위해 일부러 Map을 사용해서 풀었다
class Solution {
public int numIdenticalPairs(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
int count = 0;
for(int i = 0; i<nums.length; i++){
map.put(i, nums[i]);
}
Set<Integer> set = map.keySet();
for(int i = 0; i<set.size(); i++){
for(int j = 0 ; j<set.size(); j++){
if(map.get(i)==map.get(j) && i != j){
count++;
}
}
}
return count/2;
}
}
leetCode는 효율성이 높은 사람들의 코드들을 볼 수 있는데,
내 풀이보다는 다른 사람의 풀이가 인상깊어서 포스팅하게 되었다.
class Solution {
public int numIdenticalPairs(int[] nums) {
int ans = 0;
int arr[] = new int[101];
for(int a:nums)
{
ans += arr[a]++;
}
return ans;
}
}
문제의 조건에서 요소의 값은 100이하이기 때문에 길이가 101인 새 배열을 만들고
해당 요소의 값에 해당하는 인덱스에 1씩 더한다. 여기서 arr[a] 뒤의 ++ 연산자는 먼저 += 연산이 실행된 후에 실행되기 때문에, Pair가 아닌 값은 0을 더하고 무시된다. 이후에 Pair를 만날 때마다 변수 ans의 값과 1이 더해진 ans의 값이 더해진다.
순서 없는 경우의 수인 조합에서 골라야 할 가짓수가 2개 밖에 없을 때는 해당 순서의 조합 개수와 다음 순서의 조합 개수의 차가 1씩 증가하는 형태로 늘어난다.
예를 들면,
2가지만 뽑을 때
2개 중에서 뽑는 경우의 수는 : 1
3개 중에서 뽑는 경우의 수는 : 3 , 이전 경우의 수와의 차 : 2
4개 중에서 뽑는 경우의 수는 : 6, 이전 경우의 수와의 차 : 3,
5개 중에서 뽑는 경우의 수는 : 10, 이전 경우의 수와의 차 :4
이다
2024.03.01 - [개발공부/TIL] - [국비지원] 18일차 - nCr, nPr
[국비지원] 18일차 - nCr, nPr
CS 스터디를 지난 주부터 시작했는데, 오늘 이번주 스터디도 완료하면서 2주차가 되었다. 매주 각자 주제를 정해서 발표하는 형식인데, 나는 이번주에 REST api에 대해서 조사했다. CRUD 방식이나 api
abc-datatype.tistory.com
조합의 경우의 수를 구하는 방법은 위 포스팅 참고
이러한 규칙성 때문에 위와 같은 형태의 코드가 가능하다.
처음에는 조건이 없어서 왜 저런 코드가 가능한지 이해하기 어려웠지만 스터디원분의 도움으로 이해하게 되었다
이런 규칙성을 알고 있다면 코딩 테스트를 할 때 유용하게 사용할 수 있을 것 같다!
TIL
2024.03.20 - [개발공부/JAVA] - [JAVA] Map 컬렉션
[JAVA] Map 컬렉션
Map 컬렉션은 키(key)와 값(value)로 구성된 엔트리(Entry) 객체를 생성한다. 여기서 키와 값은 모두 객체이다. Map에서 키는 중복 저장할 수 없다. 다만 값은 중복 저장할 수 있다. 기존에 저장된 키와
abc-datatype.tistory.com
2024.03.20 - [개발공부/JAVA] - [JAVA] Stack, Queue
[JAVA] Stack, Queue
LIFO와 FIFO 컬렉션 후입선출(LIFO)은 나중에 넣은 객체가 먼저 빠져나가고, 선입선출(FIFO)은 먼저 넣은 객체가 먼저 빠져나가는 구조를 말한다. 컬렉션 프레임워크는 LIFO 자료구조를 제공하는 스택(
abc-datatype.tistory.com
'개발공부 > TIL' 카테고리의 다른 글
[국비지원] 32일차 (2) | 2024.03.22 |
---|---|
[국비지원] 31일차 - Stream (0) | 2024.03.22 |
[국비지원] 29일차 (0) | 2024.03.19 |
[국비지원] 28일차 - Minimum Absolute Difference (0) | 2024.03.18 |
[국비지원] 27일차 - 정규표현식 (0) | 2024.03.15 |