📌 금주 학습
- 알고리즘 코딩테스트가 매주 진행되고 있는데, 풀면서도 이전에 학습했던 자료구조와 알고리즘 개념들을 실전에 적용하면서 해결하지 못했던 부분들이 존재했다.
- 비교적 이론과 개념들은 숙지했다고 생각했으나 실제 코드에 녹여내고 해당 내용들을 끌고와서 알고리즘을 구현해보았으나 주간 코딩 테스트에서 계속해서 오류가 나고, 원하는 출력값을 도출해내지 못한 부분이 있었다.
- 그래서 문제 풀이 강의를 조금 더 세심하게 직접 타이핑하면서 '백문이 불여일타' 의 심정으로 Practice 문항들을 다시 복기하는 과정을 거쳤다. 2주차도 계속해서 동일하게 진행할 예정이다.
📌 리마인드 내용
- 주어진 정수 배열에서 중복된 숫자 쌍의 개수를 계산하는 문제
import java.util.*;
class Solution {
public int solution(int[] nums) {
Map<Integer, Integer> countMap = new HashMap<>();
for(int num : nums) {
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
int totalCount = 0;
for(int count : countMap.values()) {
if(count >= 2) {
totalCount += count * (count - 1) / 2;
}
}
return totalCount;
}
}
- int[] nums 를 매개변수로 받음
- countMap 이란 이름의 HashMap 생성
- 이 맵은 정수를 키로하고, 해당 정수의 등장 횟수를 값으로 갖음
- 주어진 배열 nums 를 반복하면서 countMap 에 각 숫자의 등장 횟수를 저장
- countMap.put(num, countMap.getOrDefault(num, 0) + 1) 코드 사용
- getOrDefault 메서드 => 해당 키가 존재하지 않을 때 기본값으로 0을 반환
- totalCount 라는 변수를 초기화하고, countMap 의 값들을 순회하면서 중복된 숫자 쌍의 개수를 계산
- 중복된 숫자 쌍의 개수를 계산할 때, 각 숫자가 등장한 횟수를 고려하여 계산
- 특정 숫자가 n번 등장했다면, 해당 숫자로 만들 수 있는 중복된 쌍의 개수는 n * (n - 1) / 2
- 이는 해당 숫자가 등장한 횟수에서 2개를 선택하는 경우의 수를 의미
- 계산된 중복된 숫자 쌍의 개수를 totalCount 에 누적하여 반환
📌 차주 계획
- 금주 코딩 테스트 문제 중에 메모리 제한 관련된 문항들도 있었고, 제약사항을 활용한 문제들이 있어서 이와 관련되서 코드를 어떻게 작성하고, 대비를 해야하는지 고민해보는 시간을 갖아볼 계획이다.
- 차주까지 계획된 강의를 수강하고, 이전에 자바, 자료구조, 알고리즘 관련된 이론 및 실습 내용을 정리한 포스팅도 적극적으로 업로드할 계획이다.
- 특히 Map 관련해서 코딩 테스트에서도 그렇고, 실제 적용하기가 쉽지 않은 부분이 존재해서 이와 관련된 내용은 더욱 세심하게 살펴보고, 확실히 내 것으로 만들 수 있도록 시간 투자를 해볼 것이다.