https://school.programmers.co.kr/learn/courses/30/lessons/120876
- lines를 sort한 뒤 1,2/1,3/2,3 으로 겹침을 확인해서 answer에 ++
-> 입출력 예 3번처럼 세개의 변이 겹칠 경우 중복되는 더함이 있음- map에 lines의 원소의 범위대로 value값을 더해준뒤 value가 2 이상인 경우 answer에 ++하기
-> 입출력 예 2와 같이 한 점에 값이 겹칠 경우 예외 발생
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int solution(vector<vector<int>> lines) {
int answer = 0;
map<int,int> m;
for(const auto& l : lines)
{
for(int i = l[0]; i <= l[1]; i++)
m[i]++;
}
for(const auto& p : m)
if(p.second >= 2)
answer++;
return answer - 1;
}
// lines의 for문에서 i++을 ++i로 하고 i < l[1]하면 정답이된다.
// i++이냐 ++i냐의 문제가 아니라 i < l[1]을 해야되었다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> lines) {
const int BIAS = 100;
vector<int> arr(BIAS*2 + 1,0);
int answer = 0;
for(auto& v : lines)
{
if(v[0] > v[1])
{
swap(v[0],v[1]);
}
for(int i = v[0]; i < v[1]; ++i)
{
arr[BIAS + i]++;
}
}
for(const auto v : arr)
{
answer += v > 1;
}
return answer;
}
2번의 생각과 비슷한 방법인데 map보단 array로 하였다.