프로그래머스 코딩테스트연습 체육복

김영신·2022년 4월 21일
0

문제를 잘 안 읽어서 푸는데 오래 걸렸다.
학생 마다의 체형이 다르다는 것도 나중에 봐서 오래걸린 문제.

import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        Map<Integer, Integer> map = new HashMap<>();

        for(int i = 1 ; i <= n; i++) map.put(i, 1);
        for(int haveTwoStu : reserve) map.put(haveTwoStu, map.get(haveTwoStu) + 1);
        for(int lostStu : lost) map.put(lostStu, map.get(lostStu) - 1);
        
        int prev = 0;
        int count = 0;
        for(int key : map.keySet()){
            if(map.get(key) > 0){
                count++;
                prev = map.get(key);
            }
            else{
                if(prev > 1){
                    count++;
                    prev = 0;
                    continue;
                }else if(map.get(key+1) != null && map.get(key + 1) > 1){
                    count++;
                    map.put(key + 1, 1);
                    prev = 0;
                    continue;
                }
            }
        }

        return count;
    }
}

설명

  1. Map을 활용하여 해당 학생의 번호를 Key, 해당 학생이 가지고 있는 체육복의 갯수를 Value로 한다.
Map<Integer, Integer> map = new HashMap<>();
  1. 모든 학생은 등교시에는 모두 체육복을 가져왔을 것이다.
    n만큼 모든 학생의 value에 1을 넣어준다.
for(int i = 1 ; i <= n; i++) map.put(i, 1);
  1. 도난 당했다면 체육복의 갯수를 -1, 여벌이 있다면 +1을 해준다.
for(int haveTwoStu : reserve) map.put(haveTwoStu, map.get(haveTwoStu) + 1);
for(int lostStu : lost) map.put(lostStu, map.get(lostStu) - 1);
  1. 학생이 가지고 있는 체육복이 0보다 크다면 count를 증가시키고 넘어간다.
    그 외에는 이전 학생이 가지고 있는 체육복의 수가 prev 1 보다 크다면 count를 증가시킨다.
    혹은 해당 다음 학생의 value가 null이 아니고 1보다 크다면 다음 학생의 체육복의 갯수를 2에서 1로 바꾸고 count를 증가시킨다.
for(int key : map.keySet()){
	if(map.get(key) > 0){
    	count++;
        prev = map.get(key);
    } else {
		if(prev > 1) {
        	count++;
        	prev = 0;
        	continue;
		} else if(map.get(key+1) != null && map.get(key + 1) > 1){
        	count++;
        	map.put(key + 1, 1);
        	prev = 0;
        	continue;
        }
	}
}

return count;
profile
어제보다 오늘 더 Developer

0개의 댓글