코딩테스트 - 프로그래머스/Lv. 0

[43] JAVA 중복된 숫자 개수

유혁스쿨 2023. 11. 17. 14:37
728x90
반응형

문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 0 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers의 길이 ≤ 100


입출력 예

numbers result
[1, 2, 3, 4, 5] 20
[0, 31, 24, 10, 1, 9] 744

 

입출력 예 #1

  • 두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

입출력 예 #2

  • 두 수의 곱중 최댓값은 31 * 24 = 744 입니다.

[나의 풀이]

import java.util.Arrays;

class Solution {
	public int solution(int[] array, int n) {
    	return (int)Arrays.stream(array).filter(el->el==n).count();
    }
}

 

[풀이과정] 

  1. Arrays.stream을 통해 배열을 stream으로변환
  2. filter() - int타입 배열 요소와 n이 같은지 순차적으로 조건 비교 후 조건에 해당하는 요소들 수집
  3. (Long) count() - 수집된 요소들에 대한 개수 조회
  4. (int)타입으로 강제 타입변환후 반환

[다른 풀이] Iterator

import java.util.*;

class Solution {
    public int solution(int[] array, int n) {
        Iterator<Integer> iter = Arrays.stream(array)
        .boxed()
        .filter(el -> el == n)
        .collect(Collectors.toList())
        .iterator();
        int cnt = 0;
        while (iter.hasNext()) {
            cnt ++;
            iter.next()
        }
        return cnt;
    }
}

 

던 도중 iterator를 사용해보고싶어서 사용해봤다.

array를 List로 변환한 뒤 iterator()을 통해 Iterator 타입으로 반환받는다.

while문을 통해 반환받은 Iterator객체가 hasNext() 존재하는 동안 반복하도록 지정해줬으며, (첫 커서는 요소 앞에 있음.)

다음 요소에 값이 있으면 cnt값을 수행하고 커서를 다음요소로 이동한다.

따라서 최종적인 cnt 값이 2가 된다.

 

리스트로 한번 변환한다음 다시 이터레이터로 변환하고나서 따로 루프를 또 돌려야 하므로 그리 효율적인 코드는 아닌거같다.

728x90
반응형