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

2024. 6. 19. 18:33·코딩테스트/프로그래머스 (Lv. 0)
목차
  1. 문제 설명
  2. 제한 사항
  3. 입출력 예시
  4. 문제 풀이
728x90
반응형

문제 설명

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.

lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.

선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.

제한 사항

  • lines의 길이 = 3
  • lines의 원소의 길이 = 2
  • 모든 선분은 길이가 1 이상입니다.
  • lines의 원소는 [a, b] 형태이며, a, b는 각각 선분의 양 끝점 입니다.
    • -100 ≤ a < b ≤ 100

입출력 예시

lines Result
[[0, 1], [2, 5], [3, 9]] 2
[[-1, 1], [1, 3], [3, 9]] 0
[[0, 5], [3, 9], [1, 10]] 8

 

입출력 예 #1

  • 두 번째, 세 번째 선분 [2, 5], [3, 9]가 [3, 5] 구간에 겹쳐있으므로 2를 return 합니다.

입출력 예 #2

  • 겹친 선분이 없으므로 0을 return 합니다.

입출력 예 #3

  • 첫 번째와 두 번째 선분이 [3, 5] 구간에서 겹칩니다.
  • 첫 번째와 세 번째 선분 [1, 5] 구간에서 겹칩니다.
  • 두 번째와 세 번째 선분 [3, 9] 구간에서 겹칩니다.
  • 따라서 [1, 9] 구간에 두 개 이상의 선분이 겹쳐있으므로, 8을 return 합니다.

문제 풀이

이번 문제는 저의 경우 배열을 미리 만들어 숫자가 겹치는 부분을 체크하는 방법으로 문제를 해결하였습니다.

라인을 정렬하고 순서대로 겹치는 부분을 쌓아나가는 방법도 있지만 간단하게 문제를 해결하기 위해 위 방법으로 문제를 해결하였습니다.

더보기

1. 배열을 미리 만들어 숫자가 겹치는 부분을 체크하는 방법

  • int 타입의 배열을 선언합니다.
// -100 ~ 100까지의 범위이므로 여유 공간을 생각해서 202로 지정하였습니다.
const int MAX = 202;
int arr[MAX];

 

2. 라인을 순회하며 arr 배열에 값을 부여합니다.

  • -100이 0번 인덱스에서 시작할 수 있도록 인덱스에 100을 더해 연산합니다.
for (vector<int> line : lines)
{
    for (int i = line[0]; i < line[1]; i++)
    {
        arr[i + 100]++;
    }
}

 

3. 전체 배열을 순회하며 카운트가 2 이상인 요소의 수를 더해 겹친 선분의 길이를 셉니다.

for (int i = 0; i < MAX; i++)
{
    if (arr[i] > 1)
        answer++;
}

 

정답 코드

#include <string>
#include <vector>

using namespace std;
const int MAX = 202;
int arr[MAX];

int solution(vector<vector<int>> lines) {
    int answer = 0;
    
    for (vector<int> line : lines)
    {
        for (int i = line[0]; i < line[1]; i++)
        {
            arr[i + 100]++;
        }
    }
    
    for (int i = 0; i < MAX; i++)
    {
        if (arr[i] > 1)
            answer++;
    }
    
    return answer;
}

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스 (Lv. 0)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 0 - 분수의 덧셈  (0) 2024.06.21
[프로그래머스/C++ 문제 풀이] Lv. 0 - 주사위 게임 3  (0) 2024.06.21
[프로그래머스/C++ 문제 풀이] Lv. 0 - 평행  (0) 2024.06.19
[프로그래머스/C++ 문제 풀이] Lv. 0 - 정수를 나선형으로 배치하기  (0) 2024.06.19
[프로그래머스/C++ 문제 풀이] Lv. 0 - 옹알이 (1)  (0) 2024.06.17
  1. 문제 설명
  2. 제한 사항
  3. 입출력 예시
  4. 문제 풀이
'코딩테스트/프로그래머스 (Lv. 0)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 분수의 덧셈
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 주사위 게임 3
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 평행
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 정수를 나선형으로 배치하기
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    tsoftobjectptr
    Summer/Winter Coding
    후기
    unrealengine
    2022 kakao
    Algorithm
    C++
    project t.a develop
    프로그래머스
    Unreal Engine
    청년취업사관학교
    프로젝트
    2019 kakao
    2018 kakao
    sesac
    fruitspuzzle
    dataasset
    pcce 기출문제
    구현
    unity
    delegate
    코딩테스트
    프로세스
    백준
    fsoftobjectpath
    CS지식
    c#
    timelessadventure
    ai controller
    issac3d
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 0 - 겹치는 선분의 길이

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.