파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분
빨간색 : 해결방법
초록색 : 느낀점
문제
상근이가 가지고있는 숫자중 제시된 숫자의 갯수를 구하는 문제이다.
풀이 : 내가 작성한 코드
int[] arry = new int[20000001];
int n = int.Parse(Console.ReadLine());
string[] nstr = Console.ReadLine().Split(' ');
int m = int.Parse(Console.ReadLine());
string[] mstr = Console.ReadLine().Split(' ');
int nIdx = 10000000;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < nstr.Length; i++)
{
arry[nIdx + int.Parse(nstr[i])]++;
}
for (int i = 0; i < mstr.Length; i++)
{
stringBuilder.Append(arry[nIdx + int.Parse(mstr[i])] + " ");
}
Console.WriteLine(stringBuilder.ToString());
단순히 이중for문으로 풀수도있지만 시간초과가 날수 있기 때문에 카운트소팅으로 문제를 해결했다. 카운트할 갯수를 저장한 배열을 선언하다 범위가 [-10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다] 이기 때문에 배열크기를 20,000,001로 할당했다.
예를들어 -9000000 이 값이 나오면 10000000을 더해 1000000인덱스에 접근하여 1을 더해준다.
그렇게 하면 다른 조건처리 없이 배열의 값을 할당할 수 있기 때문이다. 20,000,000이 아닌 20,000,001인 이유는 0의 카드도 나올수 -10000000인 카드가 나오면 배열의 인덱스는 0을 가리키기 때문이다.
https://www.acmicpc.net/problem/10816
반응형