[프로그래머스/C++]Lv.0 - 겹치는 선분의 길이

YH J·2023년 4월 25일
0

프로그래머스

목록 보기
72/168

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120876

시도한 방법

  1. lines를 sort한 뒤 1,2/1,3/2,3 으로 겹침을 확인해서 answer에 ++
    -> 입출력 예 3번처럼 세개의 변이 겹칠 경우 중복되는 더함이 있음
  2. 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로 하였다.

profile
게임 개발자 지망생

0개의 댓글