알고리즘 공부와 코딩테스트 준비도 해볼 겸, 코테스터디를 신청했다.
그리고 오늘이 첫 날!!
코테공부는 굳이 블로그에 적고 싶지는 않았지만, 꾸준히 TIL을 작성해보기로 했기에 작성해본다😋
- 오늘의 문제
https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 나의 풀이
키워드인 Hash를 사용해서 푸는 문제였다.
문제자체는 어렵지 않았는데, 알고리즘 적 생각회로가 익숙하지가 않아서 슬펐다🤣
시간 복잡도는 O(n)이다.
import java.util.*;
class Solution {
public int solution(int[] nums) {
// 최대 가질 수 있는 포켓몬 수
int maxPoketmon = nums.length / 2;
// HahsSet 중복허용 안함
HashSet<Integer> hash = new HashSet<>();
// 중복없이 포켓몬 목록 저장
for(int n : nums){
hash.add(n);
}
// 종류가 다른 포켓몬 수
int uniquePoketmon = hash.size();
// 최대 가질 수 있는 포켓몬 수 > 중복제거한 포켓몬 수 : 중복제거한 포켓몬 수만큼 선택 가능
// 최대 가질 수 있는 포켓몬 수 < '' : 최대 수 인 n/2마리만 선택 가능
int answer = maxPoketmon > uniquePoketmon ? uniquePoketmon : maxPoketmon;
return answer;
}
}
참고로 HashSet은 인터페이스인 Set의 구현체로 중복된 원소를 갖지 않는다.
또한 순서를 가지지 않고 검색이 빠르다.
- 알게 된 점
그리고 stream을 사용한 사람의 풀이를 보면서 한 수 배웠다.
boxed()는 메서드는 원시 타입 int의 스트림을 Integer 객체의 스트림으로 변환한다.
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] nums) {
return Arrays.stream(nums)
.boxed() // int형 배열을 스트림 타입을 지원하는 클래스타입으로 변환시킴
.collect(Collectors.collectingAndThen(Collectors.toSet(), //set객체로 변환(중복제거)
phonekemons -> Integer.min(phonekemons.size(), nums.length / 2)));
}
}
- 학습할 것
기본 자료구조 개념 복습과 stream연산
'코딩테스트 TIL' 카테고리의 다른 글
[프로그래머스 86491] 99클럽 코테 스터디 6일차 TIL + 완전탐색 (0) | 2024.05.28 |
---|---|
[리트코드 2824] 99클럽 코테 스터디 5일차 TIL + 리스트 (0) | 2024.05.27 |
[리트코드 Valid Parentheses] 99클럽 코테 스터디 4일차 TIL + Stack (0) | 2024.05.23 |
[프로그래머스 12906] 99클럽 코테 스터디 3일차 TIL + Stack/ArrayList (0) | 2024.05.22 |
[프로그래머스 42576] 99클럽 코테 스터디 2일차 TIL + Hash (0) | 2024.05.21 |