일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- timestamp
- SUM
- 큰 수 나누기
- project euler
- flask
- FOREIGN KEY
- datetime
- convention
- 파이썬
- lower_case_table_names
- python
- 네이밍
- Dictionary
- ceil
- 딕셔너리
- floor
- 세그먼트 트리
- BOJ
- mysql
- 2557
- list comprehension
- itertools
- 리스트 컴프리헨션
- enumerate
- 소수
- 외래키
- SUM()
- Codeforces
- 자료구조
- 에라토스테네스의 체
Archives
- Today
- Total
늒네 기록
[BOJ-JS] 18044번 - Polygon 본문
18044번: Polygon
You are given n segments of lengths ℓ1, ℓ2, . . . , ℓn, respectively. Determine the largest possible circumference of a convex polygon that can be constructed using these segments (in any order, and not neccessarily all of them). The polygon must be
www.acmicpc.net
각 테스트 케이스마다 n개의 변 길이가 주어지고, 이 변들을 사용해서 만들 수 있는 최대 둘레길이의 다각형의 둘레를 출력하는 문제.
아이디어는 다음과 같다.
- 제일 긴 변을 제외한 나머지 변의 길이의 합이 제일 긴 변보다 길면 삼각형을 만들 수 있다.
- 그런데 제일 긴 변을 뺀 나머지 변의 길이의 합이 긴 변의 길이보다 작거나 같다면? 긴 변을 뺀 나머지로 삼각형을 만들 수 있는지 체크해야 한다. 다시 윗 단계로.
처음에 전체 변 길이를 정렬할때 O(n log n)만큼의 시간이 걸린다. 여기서 '제일 긴 변을 제외한 나머지 변의 길이'를 매번 다시 계산해야 하면 여기에서 O(n^2)만큼 연산이 필요할 수 있으므로, 누적합 배열을 따로 만들어 두어서 활용하면 가장 긴 변을 제외하는 작업을 계속 해야 하더라도 O(n)으로 풀이가 가능해진다.
l=(0+require('fs').readFileSync(0)).split`
`
l.filter((e,i)=>i>0&&(i%2==0)).map(a=>{
a=a.split` `.map(i=>+i).sort((i,j)=>i-j)
b=[]
s=r=0
a.map(i=>b.push(s+=i))
for(i=a.length-1;i>1;i--){if(a[i]<b[i-1]){r=b[i];i=0}}
console.log(r)
})
반응형
'알골 공부 기록 > BOJ' 카테고리의 다른 글
[BOJ-JS] 20365번 - 블로그2 (1) | 2024.04.28 |
---|---|
[BOJ-JS] 27961번 - 고양이는 많을수록 좋다 (0) | 2024.04.28 |
[BOJ-JS] 30076번 - Kalėdų senelis (1) | 2024.04.26 |
[BOJ-JS] 1041번 - 주사위 (0) | 2024.04.24 |
[BOJ-JS] 9663번 - N-Queen (0) | 2024.04.24 |
Comments