문제 풀기/C#

64. 체육복

kagan-draca 2025. 2. 12. 15:49

 

기본 틀 :

using System;

public class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        return answer;
    }
}

 

먼저 매개변수로 주어진 lost와 reserve에서

 

옷을 잃어버렸지만 여벌이 있는 사람을 제거해

 

진짜 옷이 없는 사람과 진짜 옷이 남는 사람을 구해준다.

그 결과 체육복이 도둑질 당했지만,

여벌이 존재하는 학생이 존재할 수 있다는

사실을 알게 됐다.

 

그리고 해당 학생은 본인의 앞, 뒤 학생에게

여벌 옷이 있는지 확인을 하기 전

본인의 여벌 옷을 사용하는 식으로 코드를 작성해야 했다.

 

그래서,

 

List<int> realLost = lost.Where(element => !reserve.Contains(element)).OrderBy(element=>element).ToList();
List<int> realReserve = reserve.Where(element => !lost.Contains(element)).OrderBy(element=>element).ToList();

 

을 바탕으로 진짜 옷이 없는 사람과 진짜 여벌이 남은 사람을 List에 저장했다.

 

그 후, 반복문을 통해 옷이 없는 사람의 앞 뒤 사람이

 

여벌이 있는지 확인하고 여벌이 있을 경우

 

여벌을 빌리는 형식으로 코드를 작성했다.

(여벌 리스트에서 해당 사람 제거)

 

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

public class Solution 
{
    public int solution(int n, int[] lost, int[] reserve) 
    {
        List<int> realLost = lost.Where(element => !reserve.Contains(element)).OrderBy(element=>element).ToList();
        List<int> realReserve = reserve.Where(element => !lost.Contains(element)).OrderBy(element=>element).ToList();
        
        int result = n - realLost.Count;
        
        foreach (int lostPerson in realLost)
        {
            // 앞 번호 학생이 여벌 체육복을 가지고 있는지 확인
            if (realReserve.Contains(lostPerson - 1))
            {
                realReserve.Remove(lostPerson - 1);
                result++;
            }
            // 뒷 번호 학생이 여벌 체육복을 가지고 있는지 확인
            else if (realReserve.Contains(lostPerson + 1))
            {
                realReserve.Remove(lostPerson + 1);
                result++;
            }
        }
        
        return result;
    }
}

 

개인적으로 이 문제는 설명 자체가 너무 부실한 것 같다...