프로그래머스 - 체육복 (C#)

Leedong·2022년 7월 8일
0

programmers

목록 보기
11/18

문제 설명

전체 학생 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 반환하는 문제입니다.

문제 풀이

제한사항

  • 여벌의 체육복을 가진 학생은 바로 옆번호의 학생에게만 빌려줄 수 있습니다.
  • 2번 학생은 1번 학생 또는 3번 학생에게만 체육복을 빌려줄 수 있습니다.
  • 여벌의 체육복을 가진 학생이 체육복을 도난당했을 수 있고, 이때 이 학생은 다른 학생에게 체육복을 빌려줄 수 없습니다.

전체 학생의 수 - 체육복이 없으면서 다른 학생에게 빌릴 수 없는 학생의 수를 구해야 합니다.
학생 1번과 3번이 체육복이 없고, 2번이 여벌의 체육복이 있을 때 2번 학생은 1번 또는 3번 학생 1명에게만 빌려줄 수 있습니다.

여벌의 체육복을 가진 학생이 도난당한 학생이면 reserve에서 먼저 제외시킵니다.
그리고 여벌의 체육복을 가진 학생이 다른 학생에게 빌려줬으면 빌린 학생은 lost에서 제외시킵니다.

그리고 전체 학생 n - lost의 크기만큼 빼면 수업을 들을 수 있는 학생 수를 구할 수 있습니다.

제출 코드

using System;
using System.Collections;
using System.Collections.Generic;

public class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        List<int> lostList = new List<int>(lost);
        List<int> reserveList = new List<int>(reserve);
        lostList.Sort();
        reserveList.Sort();
        
        List<int> tempList = new List<int>(reserveList);
        
        for (int i = 0; i < tempList.Count; i++)
        {
            if (lostList.Contains(tempList[i]))
            {
                lostList.Remove(tempList[i]);
                reserveList.Remove(tempList[i]);
            }
        }
        
        for (int i = 0; i < reserveList.Count; i++)
        {           
            if (lostList.Contains(reserveList[i] - 1))
            {
                lostList.Remove(reserveList[i] - 1);
                continue;
            }
            
            if (lostList.Contains(reserveList[i] + 1))
            {
                lostList.Remove(reserveList[i] + 1);
                continue;
            }
        }
        
        return n - lostList.Count;
    }
}
profile
Unity, C#

0개의 댓글