본문 바로가기
프로그래머스

프로세스 (C#)

by LemongO 2024. 6. 10.

📌프로그래머스 42587

💡풀이

  • 제거 삽입을 위해 List<int> ints를 선언
  • while문으로 원하는 location의 프로세스가 실행 될 때 까지 반복.
  • bool 변수 canProcess를 true로 선언
  • 가장 앞에있는 ints[0]을 임시 정수 temp 에 담아놓고 ints[0]을 삭제
  • foreach문으로 ints 안에 남아있는 값들 중 temp 보다 큰 값이 있으면 temp를 ints 가장 뒤에 넣고(Add) canProcess = false
  • 만약 canProcess == true 즉, 실행 가능하면 answer + 1 하고 location이 0이면(찾는 프로세스면) while문 종료
  • 실행이 되건 안 되건 location을 -1 하여 순서를 앞으로 당김. 만약 0보다 작으면 가장 뒤인 ints.Count - 1
public int 프로세스(int[] priorities, int location)
{
    int answer = 0;
    
    List<int> ints = new List<int>(priorities);

    while (true)
    {
        bool canProcess = true;
        int temp = ints[0];
        ints.RemoveAt(0);

        // 우선순위가 높은 프로세스가 있으면 방금 꺼낸 건 맨 뒤로
        foreach (int i in ints)
        {
            if (temp < i)
            {
                ints.Add(temp);
                canProcess = false;
                break;
            }                        
        }

        // 프로세스 실행 가능할 때
        if (canProcess)
        {
            // 실행했으니 카운트 +1
            answer++;                    
            if (location == 0) // 방금 꺼낸게 찾는 프로세스면 while문 종료
                break;                    
        }

        // 로케이션을 앞으로 당김. 0보다 작으면 다시 맨뒤로
        location = location - 1 < 0 ? ints.Count - 1 : location - 1;                
    }

    return answer;
}

 

'프로그래머스' 카테고리의 다른 글

기능개발 (C#)  (0) 2024.06.09
의상 (C#)  (0) 2024.06.08
행렬의 곱셈 (C#)  (0) 2024.06.07
H-Index (C#)  (0) 2024.06.06
할인 행사 (C#)  (1) 2024.06.05