일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 딕셔너리
- Dictionary
- mysql
- project euler
- 외래키
- SUM
- 소수
- datetime
- BOJ
- floor
- 세그먼트 트리
- lower_case_table_names
- list comprehension
- 에라토스테네스의 체
- Codeforces
- flask
- 리스트 컴프리헨션
- 네이밍
- SUM()
- 파이썬
- ceil
- FOREIGN KEY
- 2557
- itertools
- python
- enumerate
- convention
- 큰 수 나누기
- 자료구조
- timestamp
Archives
- Today
- Total
늒네 기록
[BOJ-JS] 18044번 - Polygon 본문
각 테스트 케이스마다 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