0.코딩테스트 진행(알고리즘 x) 250분 및 진행 전 준비(redux)로 총 6~7시간 소모
1.setTimeout은 clearTimeout으로 지울 수 있으며
setInterval은 clearInterval으로 지울 수 있다.
하지만 react에서는 clear가 제대로 통하지 않는 경우가 있는데
이는 선언된 id(변수)가 제대로 유지되지 않는 문제인 것 같다.
setTimout은 일정 시간 후 작동하게 하는 방식이고
setInterval은 일정 시간 후 반복해서 작동하는 차이가 있다.
또한 setTimout은 동작 전 특정 시간이 지나지만
setInterval은 동작 사이의 간격이 특정 시간이기 때문에
x+time과 time만큼의 간격이 있다는 차이가 있다.
2.해시는 데이터를 관리하기 위해 고정된 길이의 데이터로 매핑하는 것이다.
시간복잡도 면에서 O(1)으로 탐색할 수 있다는 장점이 있지만
데이터가 많아지면 충돌하는 collision 현상이 발생한다.
이를 위해 여러가지 해결 방법이 있는데
체이닝은 노드를 계속 추가하는 방식이지만 메모리 소모의 문제가 있고
open addressing은 값이 이미 있는 경우 다음 주소로 넘기는 방식이며
선형 탐사는 정해진 고정 폭으로 넘겨 해시값의 중복을 피하고
제곱 탐사는 고정 폭을 제곱수로 옮겨 중복을 피한다.
(1).백준 3029 경고는 시작, 종료시간을 가지고 차이나는 시간을 구하는 문제였다.
다만 문자열로 제공된 시간 규칙과 출력 형태로 인한 귀찮음이 있었고
1초 이상 24시간 이하인 문제였기 때문에
00:00:00이 아닌 24:00:00으로 출력되야 하는 부분도 주의해야했다.
출력부분이 간단하게 생각했다가 03:03:03처럼 앞에 0이 붙어야 하는 부분 때문에 삼항연산자를 사용해 지저분해졌다.
기본적 접근은 초로 변환해 비교한 다음 차이나는 시간을 시,분,초로 다시 변환하는 방식을 사용했다.
let input = `12:34:56
14:36:22`.split('\n')
let secArr = []
let result
for(let i = 0 ; i < 2 ; i++){
let [h,m,s] = input[i].split(':').map(Number)
secArr.push(h*3600 + m*60 +s)
}
let [start, end] = secArr
if(start >= end){
result = end+86400-start
}
else{
result = end-start
}
console.log(`${Math.floor(result/3600) < 10 ? '0'+Math.floor(result/3600) : Math.floor(result/3600)}:${Math.floor((result%3600)/60) < 10 ? '0' + Math.floor((result%3600)/60) : Math.floor((result%3600)/60) }:${result%60 < 10 ? '0' + result%60 : result%60}`)

'회고' 카테고리의 다른 글
| [취업준비일지] - 32 (0) | 2022.11.21 |
|---|---|
| [취업준비일지] - 31 (0) | 2022.11.20 |
| [취업준비일지] - 29 (0) | 2022.11.18 |
| [취업준비일지] - 28 (0) | 2022.11.17 |
| [취업준비일지] - 27 (1) | 2022.11.16 |
