일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- C#
- 선형대수학
- 프로그래머스
- 수치해석
- 너비우선탐색
- 입출력
- C++
- 확률론
- 파라메트릭 서치
- C
- 문자열
- 9095 C++
- 철자검사
- 프로그래머스C#
- 프로그래머스 c#
- 백준 9465
- 통계학
- 백준 C#
- 코딩테스트
- cpp
- 확률
- 이분탐색
- horner
- 알고리즘
- horner algorithm
- 스티커 C++
- 백준
- BFS
- 통계
- dp
- Today
- Total
HOIT_B
[ 백준 C++ ] 2170번 선 긋기 본문
문제
https://www.acmicpc.net/problem/2170
2170번: 선 긋기
첫째 줄에 선을 그은 횟수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다.
www.acmicpc.net
처음 아이디어
시작점, 끝 점 이용
처음 입력한 두 점을
시작점, 끝 점에 넣는다.
linear 시작점에 첫 시작점을 넣어준다.
다음 시작점이 시작점과 끝 점 사이라면 계속 진행
아니라면 끝점 - 처음 시작점을 cnt에 넣어주고
linear 시작점에 다음 시작점을 넣는다.
예제로 보면
( 1 , 3 )
시작점 : 1 , 끝 점 : 3 linear시작점 : 1 cnt : 0
( 2, 5 )
새로운 시작점이 1<= 2 <=3
시작점 : 2 끝 점 : 5 linear시작점 : 1 cnt : 0
( 3, 5 )
새로운 시작점 3 은 2<= 3 <=5
시작점 : 3 , 끝 점 : 5 linear시작점 : 1 cnt : 0
( 6, 7 )
새로운 시작점 보다 큼
cnt : 끝 점(5) - 처음 시작점 (1) = 4
시작점 6 : 끝 점 : 7 ,cnt : 4
linear시작점 : 6
만약 끝이라면 끝 점 - 시작점 7-6 = 1
cnt에 더한다. cnt : 4+1 = 5
인데 무조건 적은수 부터 들어오지 않으니 입력받고 정렬
다른 사람 코드 참고해서 더 깔끔하게 변경
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
vector<pair <int,int>> arr;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i=0; i<n; i++)
{
int a,b=0;
cin >> a >>b;
arr.push_back(make_pair(a,b));
}
sort(arr.begin(), arr.end()); //오름차순으로 정렬
int ans =0;
int start = arr[0].first;
int end = arr[0].second;
for(int i=1; i<n; i++)
{
int s = arr[i].first;
int e = arr[i].second;
if(end <=s)
{
ans += end - start;
start = s;
end = e;
}else
{
if(end < e)
{
end = e;
}
}
}
ans += end - start;
cout << ans << "\n";
return 0;
}
코딩테스트 보면서 비슷한 문제 많이 본것같다. 처음에 집중못해서 길이 구해야하는데 선 갯수구하고 있었다.
'작고소중한 알고리즘 풀기' 카테고리의 다른 글
[ 프로그래머스 C++ ] 구명보트 (0) | 2023.11.15 |
---|---|
[ 백준 C++ ] 9465번 스티커 (0) | 2023.11.15 |
[프로그래머스 C++] 아이템 줍기 ( BFS ) (0) | 2023.11.15 |
[ 프로그래머스 C++ ] 네트워크 - BFS로 해결 (0) | 2023.11.14 |
[백준 C++] 11050 이항 계수1 (0) | 2023.11.09 |