새소식

반응형
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

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

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