문제 풀기/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;
}
}
개인적으로 이 문제는 설명 자체가 너무 부실한 것 같다...