주녘공부일지

[프로그래머스 C#] Lv.1 체육복 본문

CodingTest/Programmers Lv.1

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

주녘 2023. 11. 16. 18:50

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

- 직관적인 문제로 주석 참조

using System;

public class Solution
{
    public int solution(int n, int[] lost, int[] reserve)
    {
        int answer = 0;
        
        // 학생 번호에 따라 체육복을 가진 수를 나타내는 intArray
        int[] intArray = new int[n];
        
        // 가진 체육복의 개수 세팅
        for(int i = 0; i < intArray.Length; i++)
            intArray[i] = 1;
        for(int i = 0; i < lost.Length; i++)
            intArray[lost[i] - 1]--;
        for(int i = 0; i < reserve.Length; i++)
            intArray[reserve[i] - 1]++;
        
        // 체육복 빌리기 ( 없는 사람이 가진 사람에게 빌림 )
        for(int i = 0; i < intArray.Length; i++)
        {
            if(intArray[i] == 0)
            {
                if(i > 0 && intArray[i - 1] == 2)
                {
                    intArray[i - 1] = 1;
                    intArray[i] = 1;
                }
                else if(i < intArray.Length - 1 && intArray[i + 1] == 2) 
                {
                    intArray[i] = 1;
                    intArray[i + 1] = 1;
                }
            }
        }
        
        // 체육복을 입을 수 있는 학생의 수 찾기
        for(int i = 0; i < intArray.Length; i++)
            if(intArray[i] > 0)
                answer++;
        
        return answer;
    }
}