조건

조건 파악을 무엇보다 빠르게 하는게 중요합니다. 이게 속도면에서 많이 차이날듯합니다.

using System;
using System.Collections.Generic;

public class Solution {
    public int solution(int n, int[] lost, int[] reserve) 
    {
        int answer = 0;
        List<int> Reservelist = new List<int>(reserve);
        List<int> LostList = new List<int>(lost);
        List<int> removelist = new List<int>();

        // 여벌체육복이 있지만 도난당한 학생 리스트 작성
        foreach(var val in Reservelist)
        {
            foreach(var val2 in LostList)
            {
                if(val == val2) 
                {
                    removelist.Add(val);
                    break;
               }
            }
        }
        foreach(var val in removelist)
        {
            // 여벌있던 학생은 도난 당한 사람 명단에선 삭제
            LostList.Remove(val);
            // 여벌이 있는 사람 리스트에서도 삭제
            Reservelist.Remove(val);
        }
        // 없는 사람만큼 돌려야함.
        for (int i = 0; i < LostList.Count; i++)
        {
            // 체격 차이 조건을 변수 선언
            int a = LostList[i];
            int b = LostList[i] + 1;
            int c = LostList[i] - 1;

            // 여벌 한벌을 조건으로 걸고 체격 차이 조건으로 검사
            foreach(var val in Reservelist)
            {
                // 체격 +1 or -1 or 같은 사람 검사
                if (val == a || val == b || val == c)
                {
                    // 체격 조건 통과 시 여벌옷을 줌
                    // 여벌을 줬으니 삭제
                    Reservelist.Remove(val);
                    // 빌려줘서 체육이 가능한 인원 ++
                    answer++;
                    break;
                }
            }

        }
        // for문으로 체육복 다 빌려준 상태
        // 체육 수업을 들을 수 있는 학생의 최댓값
        // 잃어버린 사람에서 빌린 사람 수 빼고
        // 최종적으로 못 빌린 사람과 전체 학생 수를 뺌
        return n - (LostList.Count - answer);
    }
}

하면서 느낀게 뚜렷한 숫자가 안보이면 먼가 자주 막힘 유니티에서 그래서 Log를 좋아했습니다. 이런 테스트는 머리속으로 숫자를 생각하면서 하면 좋을것 같습니다.

다른 풀이

using System;

public class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        for (int i = 0; i < lost.Length; i++)
            {
            	// 인덱스 값 두번 돌림
                for (int j = 0; j < reserve.Length; j++)
                {
                // 잃어버린 사람[i] == 여벌 있는사람 [j]
                    if (lost[i] == reserve[j])
                    {
                	// 여벌있지만 잃어버린 사람 수 (체육 할 수 있는 사람)
                        answer++;
                        lost[i] = 100;
                        reserve[j] = 200;
                        break;
                    }
                }
            }

        for (int i = 0; i < lost.Length; i++)
            {
            	// 다시 위와 같은 조건으로 돌려줌
                for (int j = 0; j < reserve.Length; j++)
                {
                	// 나머지 값으로 차이 값과 같은지 비교
                	// 잃어버린 사람 [i] - 여벌 [j] == -1 || 
                    // 잃어버린 사람 [i] - 여벌 [j] == 1 
                    if (((lost[i] - reserve[j]) == -1) || ((lost[i] - reserve[j]) == 1))
                    {
                    	// 오차범위 계산한 인원 수 (체육 할 수 있는 사람)
                        answer++;
                        lost[i] = 100;
                        reserve[j] = 200;
                        break;
                    }
                }
            }
        answer += n - lost.Length;
            return answer;
    }
}

 

+ Recent posts