본문 바로가기

CodingTEST

[프로그래머스] 체육복 (JAVA)

반응형

프로그래머스 - [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;
    }
}
반응형