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

할인 행사 (C#)

by LemongO 2024. 6. 5.

📌프로그래머스 131127

💡풀이

  • 시작일부터 10일 연속이므로 최대 시작일을 지정 후 for문 시작
  • number와 일치하는지 확인할 새로운 정수배열을 for문 내부에 생성
  • want와 discount를 전부 조사하며 discount[i] == want[j] 일 때, 새로운 정수배열의 j를 1증가
  • 조사가 끝나면 새로운 정수배열과 number의 각 원소를 비교, 일치하면 answer 1증가
public int 할인행사(string[] want, int[] number, string[] discount)
{
    int answer = 0;                        

    // 시작일 부터 10일 연속이니 최대 시작일을 day < discount.Length - 9 까지 진행
    for (int day = 0; day < discount.Length - 9; day++)
    {
        int[] copy = new int[number.Length]; // number와 비교할 정수 배열                

        for (int i = day; i < day + 10; i++)
            for (int j = 0; j < want.Length; j++)
                if (discount[i] == want[j])
                    copy[j]++;

        int count = 0; // 각 정수 배열 원소를 비교, 일치하는 수 만큼 ++;
        for (int i = 0; i < copy.Length; i++)
        {
            if (copy[i] < number[i]) // 수량이 부족하면 X
                break;
            count++;
        }
        // 전부 일치하면 answer++;
        if(count == number.Length)
            answer++;
    }

    return answer;
}

 

discount의 길이가 길수도 있다는걸 생각하면 3중 for문은 (그걸 떠나서 n^3 자체가 별로긴 한데) 안 좋지만
제한사항의 want, number의 최대 길이와 연속일수가 10이라는 제약 때문에 3중으로 써도 그다지 시간이 안 걸렸다.

 

Dictionary를 쓰는 방법을 생각해보긴 했으나 해당 방법을 쓴 다른 사람들의 풀이는 시간이 같거나 많이걸렸다.

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

행렬의 곱셈 (C#)  (0) 2024.06.07
H-Index (C#)  (0) 2024.06.06
n^2 배열 자르기 (C#)  (0) 2024.06.04
주사위 게임 2 (C#)  (0) 2024.06.03
수 조작하기 2 (C#)  (0) 2024.06.03