일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JavaScript
- 백준 4796 javascript
- 백준 10448 javascript
- 백준 1449 노드
- 백준 11047 typescript
- 백준 4796 자바스크립트
- 백준 2503 typescript
- 백준 1018 javascript
- 백준 2503 nodejs
- 백준 11047 nodejs
- 백준 11047 javascript
- CSS
- 백준 1449 타입스크립트
- 백준 2503 javascript
- 알고리즘
- 백준 2503 자바스크립트
- 백준 1449 javascript
- 백준 11047 타입스크립트
- 백준 2503 타입스크립트
- 백준 4796 nodejs
- 백준 1018 nodejs
- 백준 1449 nodejs
- 백준 4796 캠핑
- 백준 1449 자바스크립트
- 백준 1018 typescript
- 백준 4796 타입스크립트
- 백준 1018 타입스크립트
- 백준 11047 자바스크립트
- 백준 1018 자바스크립트
- 백준 1449
- Today
- Total
POTATO THAT WANT TO BE HUMAN
[알고리즘/javascript] 백준 1449번: 수리공 항승 본문
✏️ Problem
항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다.
파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다.
항승이는 길이가 L인 테이프를 무한개 가지고 있다.
항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다.
물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다.
[ 예제 입출력 ]
🧑💻 Solution
[ 설계 ]
예제1을 살펴보자.
물이 새는 곳의 개수 = 4
테이프의 길이 = 2
물이 새는 곳의 위치 = [1, 2, 100, 101]
물이 새는 곳에는 좌우 0.5만큼의 간격이 필요하다는 사실을 주의해야 하다.
테이프는 0.5 - 2.5에 한 개, 99.5 - 101.5에 한 개로 총 2개가 필요하다.
코드는 다음과 같이 작성할 수 있다.
현재 테이프의 시작 위치를 currTape 변수에 저장한다.
물이 새는 곳의 위치가 담긴 배열을 돌면서 현재 배열요소에서 0.5를 더한 값이 현재 테이프의 시작위치 + 테이프의 길이보다 클 경우 테이프를 새로 붙이는 식으로 로직을 구성하였다. 테이프를 새로 붙일 때 테이프의 갯수(answer)을 더해주고, 현재 테이프의 시작 위치를 변경해준다.
[ 작성 코드 ]
const [info, location] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [N, L] = info.split(' ').map(Number);
const locaArr = location.split(' ').map(Number).sort((a, b) => a - b);
let answer = 1;
let currTape = locaArr[0] - 0.5;
for(let i = 1; i < N; i++) {
if(locaArr[i] + 0.5 > currTape + L) {
answer++;
currTape = locaArr[i] - 0.5;
}
}
console.log(answer);
'알고리즘' 카테고리의 다른 글
[알고리즘/javascript] 백준 11047번: 동전 0 (0) | 2024.08.30 |
---|---|
[알고리즘/javascript] 백준 4796번: 캠핑 (1) | 2024.08.29 |
[알고리즘/javascript] 백준 1018번: 체스판 다시 칠하기 (0) | 2024.08.16 |
[알고리즘/javascript] 백준 2503번: 숫자야구 (0) | 2024.08.15 |
[알고리즘/javascript] 백준 10448번: 유레카 이론 (0) | 2024.08.11 |