문제 설명

선분 3개가 평행하게 놓여있을때, 두 개  이상의 선분이 겹치는 부분의 길이를 return

https://school.programmers.co.kr/learn/courses/30/lessons/120876?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이법

선분이 그려지는 구간을 담는 배열 line[201]을 선언한다

이때 선분의 구간은 -100부터 100까지이지만 배열은 음수 인덱스를 가질 수 없으니 구간에서 100을 더한 값을 인덱스로 가진다

 

벡터를 돌면서 해당하는 구간에 +1을 한다

이때 선분이 겹쳐야하므로, 구간의 첫 부분은 제외한다

 

이제 배열 line을 돌면서 값이 2이상이면 answer에 1을 더해주며 총 겹쳐있는 선분의 길이를 세준다

 

소스 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> lines) {
    int answer = 0;
    
    int line[201] = {0};
    
    for (vector<int> tmp : lines) {
        for (int i = tmp[0] + 1; i <= tmp[1]; i++)
            line[i + 100]++;
    }
    
    for (int i = 0; i < 201; i++) {
        if (line[i] >= 2)
            answer++;
    }
    
    return answer;
}
복사했습니다!