본문 바로가기
알고리즘/문제 풀이

[Java] 프로그래머스 > 폰켓몬

by _eunji_ 2021. 12. 31.

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

class Solution {
	public int solution(int[] nums) { 
	
    int answer = 0; 
	int n = 0; 

	for(int i=0;i<nums.length;i++){ 
		if(n!=nums[i]){ answer++; n=nums[i]; } 
		if(answer>=nums.length/2) break;
        } 

	return answer;
    } 
}

첫번째 원소를 기준으로 배열 값들과 비교하고 같지 않으면 answer+1을 해주고 같으면 다시 검색하도록 구현하였다.
단, 최대값은 배열크기의 반이기 때문에 answer>=nums.length/2 일때 반복문을 빠져나오도록 설정해주었다.
그런데 ???
자꾸 틀렸다고 나온다. 모르겠다.


hashset으로 풀면 쉽게 풀 수 있다.

import java.util.HashSet; 
class Solution {
	public int solution(int[] nums) {
    	int answer = 0; 
        HashSet<Integer>set = new HashSet<Integer>(); 
        
        for(int i=0;i<nums.length;i++){
        	set.add(nums[i]); } 
            
         if(set.size()>=nums.length/2) answer=nums.length/2; 
         else answer=set.size(); 
            
         return answer; 
          
         }
      }

hashset에 원소를 추가하고 중복이 제거된 set의 크기가 배열크기의 반보다 크거나 작을때는 최대값이 num.length/2이고 작으면 set의 크기가 최대값이 된다.

중복제거 -> hashset 자료구조 이해할 것

댓글