티스토리 뷰
반응형
문제
문제 상황
- 트래픽을 계산하는데에 조건에 맞춰 최대로 겹치는 개수는 구한다.
해결 전략
- 우선 주어진 시간을 계산하기 쉽게 전부 초(sec)로 변환해준다. 그리고 float
의 경우 계산에 오류 발생 가능성이 크기 때문에 소수점 세자리가 제한인 것을 고려해 1000을 곱하여 정수로 처리해준다.
코드
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
|
# 날짜를 넣으면 시작시간과 종료 시간을 반환하는 함수
# 날짜는 고정되어 있으므로 시간, 분, 초만 생각하면 된다.
def time_log(line):
# 2016년 9월 15일은 고정, 종료 시간, 프로세스 시간
yymmdd, hhmmss, process = line.split()
hh,mm,ss = hhmmss.split(':')
hh,mm,ss = int(hh), int(mm), float(ss)
# 소수점 연산의 경우 이진분수 표현 문제로 오류가 발생하므로 1000을 곱해 소수점 처리를 해준다.
process= int(float(process[:-1])*1000)
end_time = int((hh*3600 + mm*60 + ss)*1000)
start_time = end_time - process + 1
return start_time, end_time
def solution(lines):
for idx in range(len(lines)):
lines[idx] = time_log(lines[idx])
# lines를 시작 시점을 기준으로 정렬
lines.sort()
max_cnt = 0
for i in range(len(lines)):
cnt = 0
# 새로 시작하는 요소 앞의 1초를 탐색한다.
target_time = lines[i][0]-1000
for j in range(i+1):
if lines[j][1] > target_time:
cnt += 1
if cnt > max_cnt:
max_cnt = cnt
return max_cnt
|
cs |
해설
- 시작시간으로 lines
를 정렬하여 시작시간을 기준으로만 검색하였다. 시작하는 시점의 이전 1초동안(1000을 곱하였으므로 위 코드에서는 1000) 겹치는 요소의 개수가 1초동안 동시에 진행될 수 있는 프로세스의 개수이므로 검색하여 최대값을 구하였다.
새로 학습한 것 & 실수
- 0.1의 경우 10진법으로는 1/10으로 떨어져 유한 소수로 구분 가능하지만 2진법으로 표현하면 무한 소수가 된다. 그래서 파이썬에서 소수를 처리할 경우 눈에 보이는 10진수로는 유한소수이지만 내부적으로 무한소수가 되어 오차가 발생할 수 있다. 그래서 float
처리를 위해 round
나 decimal
을 import
하여 사용할 수 있지만 이 역시 오류 발생 가능성이 있다. 그래서 float
을 int
로 만들어주기 위해 1000을 곱하였다.
출처 - programmers.co.kr/learn/courses/30/lessons/17676
반응형
'알고리즘 학습 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 보석 쇼핑 [Python] (0) | 2020.09.10 |
---|---|
프로그래머스 - 징검다리 건너기 [Python] (0) | 2020.09.09 |
프로그래머스 - 실패율 [Python] (0) | 2020.09.08 |
프로그래머스 - 디스크 컨트롤러 [Python] (0) | 2020.09.05 |
프로그래머스 - 큰 수 만들기 [Python] (0) | 2020.09.04 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 순열사이클#BOJ#Python
- 암호코드#dp#BOJ#Python
- 토마토#백준알고리즘#Python
- 공유기 설치#BOJ#이분탐색#Python
- 종이자르기#분할정복#BOJ#Python
- PassingCars#Codility#Python
- django#slicing
- Brackets#Stacks and Queues#Codility#Python
- 쿼드트리#BOJ#분할정복#Python
- 터틀비치#리콘#xbox#controller
- 섬의개수#백준알고리즘#Python
- 텀 프로젝트#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
- 랜선자르기#이분탐색#BOJ#Python
- 리모컨#완전탐색#BOJ#Python
- django
- 날짜 계산#BOJ#완전탐색#Python
- Distinct#Codility#Python
- 백준 알고리즘#BackTracking
- NumberofDiscIntersections#Codility#Sort#Python
- 파이썬알고리즘인터뷰#4장
- 병든 나이트#BOJ#탐욕법#Python
- filter#isalnum#lower
- 나무자르기#BOJ#이분탐색#Python
- N으로 표현#DP#Programmers#Python
- Triangle#Sorting#Codility#Python
- Swift#Tuples#Range
- 배열합치기#분할정복#BOJ#Python
- API#lazy#
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함