새소식

반응형
250x250
Programmers/Lv.1

프로그래머스 - 체육복

  • -
728x90
반응형

 

왜 항상 문제들은 막상 해결하고 나면 어렵지 않게 느껴지는지..

잘 모르겠다 ㅎ

 

학생별 체육복 초기화 : 모든 학생에게 기본적으로 한 벌의 체육복을 할당한다.

Map<Integer, Integer> student = new HashMap<>();
for(int i = 0; i < n; i++) {
    student.put(i + 1, 1);
}

 

체육복 도난 처리 : lost 배열을 순회하며 체육복을 잃어버린 학생의 체육복을 0으로 할당한다.

for(int i = 0; i < lost.length; i++) {
    student.replace(lost[i], 0);
}

 

여벌 체육복 처리 : reserve 배열을 순회하며 여벌의 체육복을 가진 학생의 체육복 수를 증가시킨다. 

이 때 여벌의 체육복을 가진 학생이 체육복을 도난 당했다면 그 학생의 체육복의 수는 한 벌이다.

for(int i = 0; i < reserve.length; i++) {
    student.replace(reserve[i], student.get(reserve[i]) + 1);
}

 

체육복 빌려주기 : 모든 학생을 순회하며, 여벌의 체육복이 있는 학생이 앞이나 뒤 학생에게 빌려줄 수 있는지 확인한다.

for(int i = 1; i <= n; i++) {
    int num = student.get(i);
    if(student.get(i - 1) != null && student.get(i - 1) == 0 && num == 2) {
        student.replace(i - 1, 1);
        student.replace(i, 1);
    }
    if(student.get(i + 1) != null && student.get(i + 1) == 0 && num == 2) {
        student.replace(i + 1, 1);
        student.replace(i, 1);
    }
}

 

체육 수업에 참여할 수 있는 학생 수 : 체육복이 없는 학생의 수를 카운트한다.

for(int i = 1; i <= n; i++) {
    if(student.get(i) != 0) answer++;
}

 

전체 코드

import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        Map<Integer, Integer> student = new HashMap<>();
        for(int i = 0; i < n; i++) {
            student.put(i + 1, 1);
        }
        for(int i = 0; i < lost.length; i++) {
            student.replace(lost[i], 0);
        }
        for(int i = 0; i < reserve.length; i++) {
            student.replace(reserve[i], student.get(reserve[i]) + 1);
        }
        for(int i = 1; i <= n; i++) {
            int num = student.get(i);
            if(student.get(i - 1) != null && student.get(i - 1) == 0 && num == 2) {
                student.replace(i - 1, 1);
                student.replace(i, 1);
                num = student.get(i);
            }
            if(student.get(i + 1) != null && student.get(i + 1) == 0 && num == 2) {
                student.replace(i + 1, 1);
                student.replace(i, 1);
                num = student.get(i);
            }
        }
        for(int i = 1; i <= n; i++) {
            if(student.get(i) != 0) answer++;
        }
        return answer;
    }
}
728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.