수리공 항승
2 초 | 128 MB | 23470 | 11523 | 9536 | 49.208% |
문제
항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다.
파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다.
항승이는 길이가 L인 테이프를 무한개 가지고 있다.
항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다.
물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다.
입력
첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 항승이가 필요한 테이프의 개수를 출력한다.
예제 입력 1 복사
4 2
1 2 100 101
예제 출력 1 복사
2
예제 입력 2 복사
4 3
1 2 3 4
예제 출력 2 복사
2
예제 입력 3 복사
3 1
3 2 1
예제 출력 3 복사
3
또 재밌는 문제네 수리공 항승이... 이름이 참 신기하다 항승? 품질이 심각하게 나쁜 수도 파이프 회사ㅁㅊ 개바쁘겟네 어디 보자... 왼쪽에서 정수만큼 떨어진 거리만 물이 새고 길이가 L인 테이프를 무한개 가지고 있고.... 항승이는 테이프를 이용해서 물을 막으려고 한다??????? 품질이 심각하게 나쁜 수도 파이프 회사에 걸맞는 수리공이구나 원래 저렇게 테이프로 물 막나 좌우 0.5 플러스.... 물이 새는 곳 위치와 테이프 길이로 필요한 테이프 최소 개수...!!!
예제를 보니 물이 개많이새네 뭔
첫째줄 새는곳개수 테이프길이
둘쨰줄 N개의 새는 곳 위치
이거 뭐 어떡하냐 또
헐 소름 이게 마지막임... 벌써 한 달 지남 내 시간 다 어디갔지? 미쳤네;;
문제가 되는 부분은 연속해서 물이 샐 때인 건가?? 흠 뭐를 잡아야하지? 좌우 0.5만큼 간격을 두면 1씩 더하면 되는 거 아냐?!!! 근데 그러면 굳이 저렇게 위치까지 나올 문제가 아닌 듯 한데 어디를 잡아야 하는지 모르겠다 일단 해보자
1차 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class BJ_1449 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] NL = br.readLine().split(" ");
int N = Integer.parseInt(NL[0]);
int L = Integer.parseInt(NL[1]);
String[] strLeak = br.readLine().split(" ");
int[] leak = new int[N];
for (int i = 0; i < N; i++) {
leak[i] = Integer.parseInt(strLeak[i]);
}
Arrays.sort(leak); // 물 새는 곳 오름차순 정렬
int count = 0;
for (int i = 0; i < N; i++) {
if (leak[i] > 0) {
count++;
}
}
int result;
if (count % L > 0) {
result = count / L + 1;
}
else {
result = count / L;
}
System.out.println(result);
}
}
..딱 봐두 이상하쥬?
당연히
웅 틀림^^
아
테이프를 자를 수 없고,
테이프를 자를 수 없고,
테이프를 자를 수 없고,
....바보인가 머릿속에서 열심히 잘랐음;;가성비가 내려오지 않는 테이프였던 것임.......
근데 그러면 이걸 어떻게 하지?? 예를 들어 1 터진 곳을 막았을 때 테이프 길이가 2일 때... 2일 때.... 0.5부터~2.5까지 커버되니까 2까지 막히겠네 헐 이렇게 하는 거였구만 그러면 막은 건 표시를 따로 해야 하나 1을 막았을 때 2까지 막힘 그러면
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class BJ_1449 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] NL = br.readLine().split(" ");
int N = Integer.parseInt(NL[0]);
int L = Integer.parseInt(NL[1]);
String[] strLeak = br.readLine().split(" ");
int[] leak = new int[N];
for (int i = 0; i < N; i++) {
leak[i] = Integer.parseInt(strLeak[i]);
}
Arrays.sort(leak); // 물 새는 곳 오름차순 정렬
int count = 0; // 테이프 개수 저장
int fixed = 0; // 어디까지 고쳤는지 저장
for (int i = 0; i < N; i++) {
// 아직 덜 고친 부분일 떄
if (leak[i] > fixed) {
count++; // 테이프 하나 더 씀
fixed = leak[i] + L - 1; // 고친 부분 표시, 0.5씩 여유 두면 1 빼야 함
}
}
System.out.println(count);
}
}
맞았따!1!!!!!!!
오늘의 교훈: 문제를 잘 읽자
헐... 이제 7월 마지막임 거의 끝남 소오름 난 한 게 없다고............ 돌려조요 내 7월
'백준 풀기' 카테고리의 다른 글
백준 11725번: 트리의 부모 찾기 with Java (0) | 2024.08.11 |
---|---|
백준 11279번: 최대 힙 with Java (0) | 2024.08.10 |
백준 1213번: 팰린드롬 만들기 with Java (0) | 2024.07.27 |
백준 1935번: 후위 표기식2 with Java (0) | 2024.07.26 |
백준 17626번: Four Squares with Java (1) | 2024.07.25 |