📌프로그래머스 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 |