[코딩테스트 C++]수리공 항승

후이재·2020년 10월 21일
0

오늘의 문제

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

수리공 항승

접근 방법

  • 어차피 모든 물이 새는 부분을 막아야 한다.
  • 따라서 맨 앞쪽 부분부터 시작해서 테이프 길이만큼 포함된 곳은 넘기고, 포함되지 않으면 다른 테이프를 사용한다.

나의 풀이

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 1000;
int n, l; // 개수, 길이
int tape[MAX];
// 수리공 항승
int solution(){
    int answer = 1;
    sort(tape, tape+n);
    int t = tape[0];
    for(int i=1;i<n;i++){
        if(tape[i] <= t + l-1)
            continue;
        else{
            t = tape[i];
            answer++;
        }
    }
    return answer;
}

다른 풀이

#include <stdio.h>
#include <algorithm>

int main(void) {
	int N, K, cnt = 0;
	scanf("%d %d", &N, &K);
	int pos[N], pos_check = 0;
	for(int i = 0; i < N; i++) {
		scanf("%d", &pos[i]);
	}
	std::sort(pos, pos+N);
	
	for(int i = 0; i < N; i++) {
		if(pos_check < pos[i]){
			pos_check = pos[i] + K - 1;
			cnt++;
		}
	}
	printf("%d", cnt);
	return 0;
}

배울 점

  • 1을 빼고 <=를 했는데 한번만 더 생각하면 <이다. ㅎㅎ 더 줄일 수 있었는데
profile
공부를 위한 벨로그

0개의 댓글