(1).백준 2399번 거리의 합은 각 포인트마다 다른 곳으로 이동할 때 드는 거리를 다 구해야 하는 문제였는데

처음에는 단순하게 전체를 다 순회하게 했지만

1만개로 n^2 해도 1억건 밖에 되지 않아 초당 10억건 이상 처리되서

이대로 등록해도 문제없을거라고 생각한 것과 다르게 시간초과로 에러가 발생해버렸다.

 

결국 정렬해서 부분합 방식으로 처리해서 해결할 수 있었는데

다시 한번 최적화가 성능에 얼마나 큰 영향을 줄 수 있는지 체감하는 기회가 됐다.

 

특히 최근에 대규모 처리로 인해 문제가 있는 엑셀 파일 자동 다운로드의 경우

렌더링 부담을 최적화하기 위해 일정 주기로만 갱신하던가

아니면 갱신 여부를 on/off로 처리하고 총 처리 수량만 실시간으로 확인하게 하는 등 개선이 가능할 것 같다.

// const input = `5
// 1 5 3 2 4`.split('\n')[1].split(' ').map(BigInt)

// let result = 0n

// for(let i = 0 ; i < input.length ; i++){
//     for(let j = 0 ; j < input.length ; j++){
//         let added = input[i] - input[j]
//         result += (added > 0n ? added : added * -1n)
//     }
// }

// console.log(String(result))
const input = `5
1 5 3 2 4`.split('\n')[1].split(' ').map(BigInt).sort((a,b) => a < b ? -1 : 1)

let result = 0n
let prefix = 0n

for(let i = 0; i < input.length; i++){
  result += input[i] * BigInt(i) - prefix
  prefix += input[i]
}

console.log(String(result * 2n))

'회고' 카테고리의 다른 글

[개발일지] - 857(주말)  (0) 2025.11.08
[개발일지] - 856  (0) 2025.11.07
[개발일지] - 854  (0) 2025.11.05
[개발일지] - 853  (0) 2025.11.04
[개발일지] - 852  (0) 2025.11.03

+ Recent posts