프로그래머스 C#/Lv.1

[프로그래머스 C#] 체육복

썩은피망 2024. 6. 9. 19:42
반응형

문제 살펴보기

  1. lost = 체육복을 갖고 있지 않은 학생들이 있습니다.
  2. reserve = 여분의 체육복을 갖고 있는 학생들이 있습니다.
  3. 그 학생들은 자신의 앞 뒤 번호의 학생들에게만 체육복을 빌릴 수 있습니다.
  4. 최대한 빌려 가장 많은 학생이 체육복을 입을 수 있는 최댓값을 구하세요.

제한사항

  • 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;
    }
}

반응형