


https://school.programmers.co.kr/learn/courses/30/lessons/120876#
- 이문제는 실수로 풀었는데 왜 맞는지 이해가 안된다.
 
- 혹시 이러한 방식이 왜 정답이 되는지 아시는분은 댓글로 알려주세요!
 - 풀이 과정은 여러개의 점으로 이루어지는 선분 세개를 모두 점의 갯수로 표현해 하나의 맵에 합쳐 저장한다. 이때 각 선분의 오른쪽 끝값을 1씩 줄인 상태에서 저장한다.
 
- 말로 표현한거보다 코드로 보는게 이해하기 편함.
 - 세개의 선분 [[0,3],[0,3],[0,3]] 이 주어지면 위 과정을 행하면 하나의 맵 변수 m에 다음과 같이 저장된다.
 
m[0]: 3,m[1]: 3,m[2]: 3- 실제 세개의 선분은 길이 3의 0부터 3까지로 이루어져있지만 위와같이 저장됨.
 - 마지막으로 2개이상 겹치는 길이를 원하므로
 m[i]의 값이 1보다 큰 값의 갯수를 반환하면 정답이된다.- 위의 경우엔 3개다 모두 1보다 크므로 3.
 
#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 &line: lines) {
        for(int i=line[0];i<line[1];i++) {
            m[i]++;
        }
    }
    for(const auto &i: m) {
        if(i.second>1) {
            answer++;
        }
    }
    return answer;
}
- 실수로 어쩌다보니 풀게 되었는데 과정은 이해 되지만 어떤 원리로 이게 항상 정답인지는 모르겠습니다.
 - 혹시라도 아시는분은 댓글로 설명해주신다면 감사하겠습니다! 또는 반례가 있으신분도 환영입니다!