int answer = 0;
int[] ins = new int[200];
int start = 0;
int end = 0;
for (int i = 0; i < lines.GetLength(0); i++)
{
start = lines[i, 0];
end = lines[i, 1];
for (int j = start; j <= end; j++)
{
ins[Math.Abs(j+100)]++;
}
}
bool isStart = false;
for (int i = 0; i < ins.Length; i++)
{
if (ins[i] >= 2)
{
if(!isStart)
{
isStart = true;
start = i;
}
}
else
{
if (isStart)
{
answer += Math.Abs(i - start - 1);
isStart = false;
}
}
}
return answer;
값을 더해주는 과정에서 마지막 end 인덱스 까지 1을 더해주니,
[[4, 7], [4, 5], [6, 7]], 2
이 반례에서 막혔다.
두 선분의 시작과 끝의 인덱스가 겹치는 과정이 문제였다.
5와 6의 인덱스에서 모두 2로 값이 나온다.
처음에는 따로 end 인덱스 부분을 표시해주려 했지만 그럴 필요가 없다.
int answer = 0;
int[] ins = new int[200];
int start = 0;
int end = 0;
for (int i = 0; i < lines.GetLength(0); i++)
{
start = lines[i, 0];
end = lines[i, 1];
for (int j = start; j < end; j++)
{
ins[Math.Abs(j+100)]++;
}
}
for (int i = 0; i < ins.Length; i++)
{
if (ins[i] >= 2)
{
answer++;
}
}
return answer;
그냥 end 부분까지 증가하지 않으면 훨씬 쉽다.