주녘공부일지

[프로그래머스 C#] Lv.3 숫자 게임 본문

CodingTest/Programmers Lv.3

[프로그래머스 C#] Lv.3 숫자 게임

주녘 2024. 3. 6. 19:51

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

 

프로그래머스

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

programmers.co.kr

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

조건에 따라 승점을 가장 많이 챙길 수 있는 경우의 승점을 구하는 문제

- B에서 A를 가장 많이 이길 수 있는 경우를 구해야 함

- 각 배열을 오름차순 정렬하여 최소 값부터 확인

- 각 배열의 최소 값을 가리키는 indexA, indexB

 

경기를 하지 않은 숫자들 중에서, A의 최소 값을 이길 수 있는 B의 최소 값을 구함

- 현재 확인 중인 A의 최소 값을 B의 최소 값으로 이길 수 없다면 B의 다음 큰 수를 최소 값으로 봄 (indexB++)

- 만약 이길 수 있다면 두 수로 경기 진행 (indexA++, indexB++)

    using System;

    public class Solution
    {
        public int solution(int[] A, int[] B)
        {
            // 각 배열을 오름차순 정렬
            Array.Sort(A);
            Array.Sort(B);

            // A의 최소 값으로 B의 최소 값을 이길 수 있는지 여부 체크
            int indexA = 0;
            for (int indexB = 0; indexB < B.Length; indexB++)
                if (B[indexB] > A[indexA])
                    indexA++; // 승점 + 1

            return indexA;
        }
    }