Make Unreal REAL.
article thumbnail
Level 0. 겹치는 선분의 길이

 

 

각 선분이 지나는 점들의 값을 1씩 증가시켜 2 이상인 점의 개수를 찾아 해결했다.

 

값을 증가시키기 위해 순회하지 않고 범위를 이용해서 좀 더 효율적인 방법이 있나 찾아보았다.

 

겹치는 부분이 아니라 이어진 부분을 찾는 문제에서는 스위핑 기법 같은 것이 있었는데 이 문제에 대해서는 더 효율적인 방법을 찾을 수 없었다.

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> lines)
{
    vector<int> v(200, 0);

    for (vector<int>& line : lines)
        for (int i = line[0]; i < line[1]; ++i)
            ++v[100 + i];

    return count_if(v.begin(), v.end(), [](const int e) { return 1 < e; });
}

 

순차적으로 접근하는 for문이나 for_each() 함수 말고 성능을 위해 순차 접근을 보장하지 않는 transform() 함수를 사용하면 조금 더 빨리 수행할 수 있다.

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> lines)
{
    vector<int> v(200, 0);
    auto it_middle = v.begin() + 100;

    for (vector<int>& line : lines)
        transform(it_middle + line[0], it_middle + line[1], it_middle + line[0], [](const int e) { return e + 1; });

    return count_if(v.begin(), v.end(), [](const int e) { return 1 < e; });
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 0. 다항식 더하기  (0) 2023.02.05
Level 0. 분수의 덧셈  (0) 2023.02.04
Level 0. 가까운 수  (0) 2023.02.02
Level 0. 합성수 찾기  (0) 2023.02.01
Level 0. 약수 구하기  (0) 2023.01.31
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그