프로그래머스 C#/Lv.1
[프로그래머스 C#] 체육복
썩은피망
2024. 6. 9. 19:42
반응형
문제 살펴보기
- lost = 체육복을 갖고 있지 않은 학생들이 있습니다.
- reserve = 여분의 체육복을 갖고 있는 학생들이 있습니다.
- 그 학생들은 자신의 앞 뒤 번호의 학생들에게만 체육복을 빌릴 수 있습니다.
- 최대한 빌려 가장 많은 학생이 체육복을 입을 수 있는 최댓값을 구하세요.
제한사항
- 2 ≤ 학생의 수 ≤ 30
입출력 예
n | lost | reserve | result |
5 | [2, 4] | [1, 3, 5] | 5 |
5 | [2, 4] | [3] | 4 |
3 | [3] | [1] | 2 |
using System;
using System.Collections.Generic;
public class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
Dictionary<int, int> dict = new Dictionary<int, int>();
//모든 학생들에게 기본 1개씩
for(int i = 0; i < n; i++)
dict[i] = 1;
//없는 학생들은 0개로
for(int i = 0; i < lost.Length; i++)
dict[lost[i] - 1]--;
//여유분 있는 학생들은 2개로
for(int i = 0; i < reserve.Length; i++)
dict[reserve[i] - 1]++;
for(int d = 0; d < n; d++)
{
if(dict[d] == 2)
{
int[] index = new int[2];
index[0] = (d - 1) >= 0 ? (d - 1) : -1;
index[1] = (d + 1) < n ? (d + 1) : -1;
for(int i = 0; i < 2; i++)
{
if(index[i] == -1) continue;
if(dict[index[i]] == 0)
{
dict[index[i]]++;
dict[d]--;
break;
}
}
}
}
foreach(var d in dict.Keys)
{
Console.Write(dict[d] + " ");
if(dict[d] > 0)
{
answer++;
}
}
return answer;
}
}
반응형