반응형
프로그래머스 - [Level 1] 체육복
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
- 체육복이 도둑맞아 여분 체육복이 있는 친구들은 친구에게 옷을 나눠줘 체육수업을 들어야한다.
- 여분을 가진 사람은 체육복은 앞 뒤 사람에게만 빌려줄 수 있고, 자신이 도둑맞았을 경우는 자신이 입어야한다.
- 이때 체육수업을 들을 수 있는 학생의 최댓 값을 출력
해결 키 포인트
- 여분을 가져온 사람, 도난받은 사람 리스트는 순서대로 되어 있지 않다
- 정렬이 필수 !
- 도난당한 학생들만 확인
- 본인 혹은 위 아래 애 중에 여분 옷을 가져온 애가 있는지 확인 → 있을 경우 여분 옷 리스트에서 해당 학생 제거
- 주변 사람 중 아무도 여분 옷을 안 가져왔을 경우, 체육 할 수 있는 인원 1 감소
코드
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n;
// 여분 옷을 가져왔음을 쉽게 알기 위해 ArrayList로 제작
ArrayList<Integer> reserveList = new ArrayList<>();
for(int i=0;i<reserve.length;i++) {
reserveList.add(reserve[i]);
}
// 옷 도난 당했음을 쉽게 알기 위해 ArrayList로 제작
ArrayList<Integer> lostList = new ArrayList<>();
for(int i=0;i<lost.length;i++) {
lostList.add(lost[i]);
}
// 앞에 부터 한 명씩 확인하기 위해 정렬
Collections.sort(reserveList);
Collections.sort(lostList);
// 잃어버린 애들만 확인해서,
// 본인 혹은 위 아래 애 중에 여분 옷을 가져온 애가 있는지 확인하고
// 있으면 가져온 애 목록에서 제거
for(int i=0;i<lostList.size();i++) {
int index = lostList.get(i);
if (lostList.contains(index)) {
// 본인 확인
if (reserveList.contains(index)) {
reserveList.remove((Integer) (index));
}
// 아래 애 확인
else if (reserveList.contains(index - 1)) {
reserveList.remove((Integer) (index - 1));
}
// 위 애 확인 (위 애가 본인이 도난 당했으면 자기가 사용해야하므로 제외)
else if (reserveList.contains(index + 1) && !lostList.contains(index + 1)) {
reserveList.remove((Integer) (index + 1));
}
// 아무도 안 가져왔을 경우, 체육 할 수 있는 인원 1 감소
else {
answer--;
}
}
}
return answer;
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 3584] 가장 가까운 공통 조상 (JAVA) (1) | 2023.10.11 |
---|---|
[백준 5639] 이진 검색 트리 (JAVA) (1) | 2023.10.11 |
[프로그래머스] 네트워크 (JAVA) (1) | 2023.10.11 |
[프로그래머스] 게임 맵 최단거리 (JAVA) (2) | 2023.09.19 |
[백준 14675] 단절점과 단절선 (JAVA) (0) | 2023.09.19 |