일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 템플릿 문자열
- HTML
- Spring
- 정글sw
- PINTOS
- Coding Test
- 회원가입 폼
- 회원가입
- 리액트
- conding test
- onChange
- 프로그래머스
- 코딩테스트
- malloc-lab
- 자바스크립트
- python
- html input
- SW정글
- 목록 창 만들기
- 사용자 정의 객체
- React
- javascript
- sw 정글
- Express
- 백준
- 자바스크립트 문자열 변수
- JavaScrpit
- node.js
- dfsbfs
- sw정글사관학교
Archives
- Today
- Total
코드치고 무게치고
[백준 python] 1449번 수리공 항승 - 그리디 본문
[백준 python] 1449번 수리공 항승 - 그리디
레벨: 실버 3
언어: python
📑풀이 과정
물이 세는 곳 하나를 막기 위해서는 좌우 0.5 만큼이 필요하다
물이 세는 곳이 1이라면 0.5 ~ 1.5 구간이 테이프가 발리는 구간이다.
예시 처럼 테이프의 길이가 2이고
1 과 2 에서 물이 셀 때
0.5 ~ 2.5 까지 테이프를 붙여야하고 이때 길이 2짜리가 한개 들어간다.
- 물이 세는 곳의 입력을 배열에 저장하고 오름차순으로 정렬한다.
- 처음 들어오는 값을 기준으로
테이프를 처음 붙이는 곳 arr[0] - 0.5 -> start라는 변수에 저장
테이프가 끝나는 곳 start + L -> end라고 저장 - arr 순회 하면서 start 보다 크고 end 보다 작은 값은 넘어가고 범위를 넘어가면 cnt를 1더하고 범위를 새로 설정한다.
📋풀이 코드
import sys
input = sys.stdin.readline
N , L = map(int, input().split())
arr = list(map(int, input().split(' ')))
arr.sort()
start = arr[0]-0.5
end = start + L
cnt = 1
for i in range(0, len(arr)):
if start< arr[i] < end:
continue
else:
cnt+=1
start = arr[i]-0.5
end = start + L
print(cnt)
'개발공부 > 코딩테스트 준비' 카테고리의 다른 글
[백준 python] 1105번 팔 - 그리디 (0) | 2022.03.09 |
---|---|
[백준 python] 1246번 온라인 판매 (0) | 2022.03.05 |
[백준 python] 1049번 기타줄 - 그리디 (0) | 2022.03.04 |
[백준 python] 18310번 안테나 - 그리디 (0) | 2022.03.04 |
[백준 python] 1448번 삼각형 만들기 (삼각형의 조건) - 그리디 (0) | 2022.03.03 |
Comments