728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java#
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
레벨1 중에선 어려운 편에 속하는 체육복 문제.
Greedy 문제로 번호가 작은 학생이 먼저 빌릴 수 있는 체육복이 있다면 빌리는 것이 최적이라는 것을 파악해야한다.
빠른 순서의 학생들이 먼저 빌려도 되는 이유는 양쪽에서 빌릴 수 있기 때문에 후에 학생들은 반드시 오른쪽에서는 빌릴 수 있는 1번의 기회가 존재하기 때문이다.
정답 코드
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int reserveChk[] = new int[n + 2];
Arrays.fill(reserveChk, 1);
for(int i = 0; i < reserve.length; i++) {
reserveChk[reserve[i]]++;
}
for(int i = 0; i < lost.length; i++) {
reserveChk[lost[i]]--;
}
for(int i = 1; i <= n; i++) {
if(reserveChk[i] == 0) {
if(reserveChk[i - 1] > 1) {
reserveChk[i]++;
reserveChk[i - 1]--;
}
else if(reserveChk[i + 1] > 1) {
reserveChk[i]++;
reserveChk[i + 1]--;
}
}
}
int answer = 0;
for(int i = 1; i <= n; i++) {
if(reserveChk[i] > 0) {
answer++;
}
}
return answer;
}
}

'프로그래머스 풀이 > Lv 1' 카테고리의 다른 글
| 프로그래머스 - 키패드 누르기 (C++) (0) | 2023.02.19 |
|---|---|
| 프로그래머스 - 콜라 문제(C++) (0) | 2022.11.21 |
| 프로그래머스 - 로또의 최고 순위와 최저 순위(C++) (0) | 2022.11.16 |
| 프로그래머스 - [1차] 다트 게임 (0) | 2022.11.15 |