비버놀로지

[Programmers 프로그래머스] 42862 체육복 본문

ALGORITM/JAVA

[Programmers 프로그래머스] 42862 체육복

KUNDUZ 2021. 1. 7. 10:11
728x90

 

programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

체육복을 가지고 있는 학생과 추가로 가지고 있는 학생을 두 배열로 해서 비교를 해나가며 체육복을 하나씩 가지게 만들어 준다.

그리고 나서 체육복을 가지고 있는 학생들의 수를 세어준다.

import java.util.Arrays;


class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
		int answer=0;
		int cloth[]=new int[n+1];	//체육복을 가진 학생
		int extra[]=new int[n+1];	//추가로 가지고 있는 학생
		Arrays.fill(cloth, 1);		//모두 1개를 가지고 있다고 한다.
		cloth[0]=0;
		for (int i = 0; i < lost.length; i++) {	//체육복을 잃어버린 학생들 -1 해주기
			cloth[lost[i]]--;				
		}
		for (int i = 0; i < reserve.length; i++) {	//추가로 체육복을 가지고 있는 학생
			extra[reserve[i]]++;
		}
		for (int i = 1; i < cloth.length; i++) {	//내가 추가로 체육복이 있다면 옷을 1로
			if(cloth[i]==0&&extra[i]==1) {
				cloth[i]=1;
				extra[i]=0;
			}
		}
		for (int i = 1; i < cloth.length; i++) {	//해당 학생의 앞,뒤학생이 추가 옷이 있다면
			if(cloth[i]==0) {
				if(extra[i-1]==1) {
					cloth[i]=1;
					extra[i-1]=0;
				}else if(i+1<cloth.length&&extra[i+1]==1) {
					cloth[i]=1;
					extra[i+1]=0;
				}
			}
		}
		for (int i = 0; i < cloth.length; i++) {
			if(cloth[i]==1) {
				answer++;
			}
		}
        return answer;
    }
}
728x90
Comments