https://programmers.co.kr/learn/courses/30/lessons/42862?language=java
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
풀이
체육복을 잃어버린 학생(lost)은 -1, 체육복의 여벌을 갖고있는 학생(reserve)는 +1을 해준 배열 people을 선언한다. 배열크기를 n+2로 선언한것은 후에 조건식에서 i가 0보다 크고, 전체학생보다 작은지등의 비교문을 적지 않기 위해서이다!
체육복을 갖고있지 않은 학생 (people이 -1) 일 때, 자기보다 앞자리, 뒷자리 학생이 여벌 체육복을 가지고 있다면(people이 1) 체육복을 빌린다. 둘 다 여벌체육복이 없다면 체육복을 빌리지 못해 수업을 듣지 못하니 answer을 -1해준다.
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int[] people = new int[n+2];
int answer = n;
for(int l : lost)
people[l]--; // lost 학생 -1
for(int r : reserve)
people[r]++; // reserve 학생 +1
for(int p : people)
System.out.println(p);
for(int i=1;i<people.length-1;i++){
if(people[i]==-1){
if(people[i-1] == 1){
people[i]++;
people[i-1]--;
}else if(people[i+1] ==1){
people[i]++;
people[i+1]--;
}else
answer--;
}
}
return answer;
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 : 키패드 누르기 (0) | 2022.02.14 |
---|---|
[Java] 프로그래머스 : 크레인 인형뽑기 게임 (0) | 2022.02.14 |
[Java] 프로그래머스 : 모의고사 (0) | 2022.02.11 |
[Java] 프로그래머스 : k번째 수 (0) | 2022.02.11 |
[Java] 프로그래머스 : 시저 암호 (0) | 2022.02.08 |