Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준OJ] 1449번 수리공 항승

    2021. 7. 12.

    by. Hyeon-Uk

    반응형

    https://www.acmicpc.net/problem/1449

     

    1449번: 수리공 항승

    첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나

    www.acmicpc.net


     

     

    -풀이-

    먼저, 입력된 물이 새는 곳의 위치를 오름차순을 해준다.

    처음 테이프를 붙이는 곳의 위치를 arr[0]으로 해준뒤, 정렬된 배열을 탐색하면서, 테이프를 붙인곳과의 거리가 L보다 작다면, 테이프를 새로 붙일 필요가 없으므로 넘어가고, L보다 크거나 같다면 새로운 테이프를 추가해서 붙이고, 테이프의 시작점을 갱신해주면 된다.

    이때 L보다 크거나 같아야 하는 이유는, 문제에서 주어진 좌우 0.5만큼의 간격을 줘야한다는 조건때문이다.

     

    예를들어 1 , 2 , 3 위치에서 물이 새는중이고, 테이프의 길이가 2라고 한다면, 1,2,3 모두 한 테이프로 묶을 수 없다. 왜냐하면 1에 붙일때, 테이프의 끝이 1이 아닌, 0.5부터 붙여야 하기때문에 0.5~2.5까지 테이프가 커버를 하기때문에 3을 가릴 수 없다. 따라서 2.5부터 다시 테이프를 붙여야해서 2개가 필요하게 되는것이다. 이런 이유때문에 조건문을 조심해서 제출해야한다.

     

    -시간복잡도-

    N개의 배열을 한번만 탐색하면 되므로 O(N)이 되지만, 정렬을 할때, O(NlogN)이 걸리므로, 최종적으론 O(NlogN)이 된다.

     

    -코드-

    #include <iostream>
    #include<algorithm>
    using namespace std;
    
    int arr[1001];
    
    int main() {
    	ios_base::sync_with_stdio(false);
    	cin.tie(NULL);
    	cout.tie(NULL);
    	int n, l;
    	cin >> n >> l;
    
    	for (int i = 0; i < n; i++) {
    		cin >> arr[i];
    	}
    
    	sort(arr, arr + n);
    
    	int st = arr[0];
    	int cnt = 1;
    	for (int i = 1; i < n; i++) {
    		if (arr[i] - st >= l) {
    			st = arr[i];
    			cnt++;
    		}
    	}
    	cout << cnt;
    }

     

    반응형
    저작자표시 (새창열림)

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준OJ] 15591번 MooTube (Silver)  (0) 2021.07.13
    [백준OJ] 17027번 Shell Game  (0) 2021.07.13
    [백준OJ] 11048번 이동하기  (0) 2021.07.12
    [백준OJ] 11721번 열 개씩 끊어 출력하기  (0) 2021.07.09
    [백준OJ] 1922번 네트워크 연결  (0) 2021.07.08

    댓글

    관련글

    • [백준OJ] 15591번 MooTube (Silver) 2021.07.13
    • [백준OJ] 17027번 Shell Game 2021.07.13
    • [백준OJ] 11048번 이동하기 2021.07.12
    • [백준OJ] 11721번 열 개씩 끊어 출력하기 2021.07.09
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바