Algorithm

프로그래머스: 포켓몬

KJihun 2023. 6. 21. 18:03
728x90

알고리즘 문제를 풀면서 Stream을 이용하여 문제를 너무 풀어보고 싶었다.

그래서 시간이 날 때 틈틈이 Stream에 대해 알아봤다

처음 볼 땐, 무슨말인지도 모르겠고 걱정이 앞섰지만 코드들이 어떤 역할을 하는지 눈에 익기 시작했다.

Stream을 사용하여 풀었던 첫번째 문제이다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

여러 종류의 포켓몬이 주어진다. 포켓몬의 종류는 중복될 수 있다.

포켓몬은 주어진 포켓몬의 절반만큼 가져갈 수 있다.

이때, 다른 종류의 포켓몬은 몇 마리인가? 가 문제이다.

손쉽게 풀 수 있었던 문제였다. 이번에는 Stream을 사용하여 풀어보았다.

		// maxPokemon은 arr.length/2
		int number = (int) list.stream().distinct().count();
        answer = (number > maxPokemon)? maxPokemon : number;
        return answer;

 

lambda도, method reference도 사용하지 않은 간단한 코드지만

내 손에서 처음으로 나온 Stream이라 기분이 매우 좋았다.

 

 

어렵게만 느껴졌던 Stream은 복잡해 보였지만 생성, 중간연산, 최종연산 세 부분으로 구성되는 단순한 구조이다.

연산 메서드들의 이름도 매우 직관적이라 금방 이해할 수 있었고,

자주 사용하는 중간연산(sorted, map, filter...)과 최종연산(max, foreach...)의 사용법들을 알게 됐다.

코드로 직접 구현해 봄으로써 가독성이 좋아지는걸 직접 느꼈고 동시에 필요성도 느끼게 됐다.

앞으로 프로젝트를 진행할 때에 Stream을 유연하게 사용할 수 있게 되도록 더욱 노력해야겠다.