일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- rate limit
- #useRef #언제 쓰는데?
- 다익스트라 #파티 #백준
- 플로이드 #c++
- html entities
- 버블링 #갭쳐링 #이벤트 #JS
- react #useCallback #react Hook
- 얕은 복사 #깊은 복사 #shallow copy #deep copy
- React #controlled component #비제어 컴포넌트 #제어 컴포넌트
- npm #not being able to find a file #npm install Error
- React #리액트 이벤트 주기 #리액트 이벤트
- 이친수
- React #Hook rules #Hook 규칙
- 빡킹독
- react fragment
- react
- donwstream #upstream #origin
- 백준 #적록색약
- axios
- interceptors
- React #effect hook #useEffect
- DP #c++
- 코드스테이츠 #알고리즘 #그리디
- useState #Hooks
- React-Query
- JWT #토큰 #refreshToken #accessToken #Token #token #localStorage #sessionStorage
- 백준 #직각삼각형
- raect typescript #react #typescript #styled-component
- RateLimit
- 노마드 코더 #타입스크립트 #typescript #class
- Today
- Total
꿈꾸는 개발자
완전탬색-(JS) 본문
완전탐색은 말 그대로 완전하게 모든 것을 탐색한다는 의미이다. 영어로는 "Brute Force"라고 부르는 데 무식하게 한다? 란 란 의미로 사용되고 있다. 예로 들어서 4자리 수의 비밀번호를 풀어내기 위한 가장 무식한 방법으로는 0000~9999까지 모든 가능한 경우의 수를 다 시도해보는 것이다.
대부분의 문제를 완전탐색으로 풀 수도 있게지만, 컴퓨터과학에서 중요하게 생각하는 건 무엇보다 사용된 알고리즘의 "적절성" 과 "효율성"이다. 다른 더 좋은 알고리즘 기법이 있음에도 불구하고 오나탐을 사용하는 것은 엄청난 낭비이기 때문에 추천되진 않는다.
또, 알고리즘 문제 풀이, 코테 등에선 시간 복잡도를 고려해야 하기 때문에 완탐으로 풀 경우 제한을 초과하는 경우도 발생하기 때문에 항상 문제와 시간 복잡도 등을 고려해서 풀어야 한다.
각설하고, 알고리즘 강의에서 나온 완탐 문제 중 하나를 코드와 함께 설명하려고 한다.
문제
자릿수의 합
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다
- 내가 작성한 코드
function solution(n, arr) {
let ans = 0;
let max = 0;
for (let i = 0; i < n; i++) {
let num = arr[i]
.toString()
.split("")
.reduce((accu, pre) => {
return accu + Number(pre);
}, 0);
if (num > max) {
max = num;
ans = arr[i];
}
if (num === max) {
ans = ans < arr[i] ? arr[i] : ans;
}
}
return ans;
}
let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));
위 코드에선 for문을 돌려 각 배열에 있는 숫자 합을 구한 방식으로 처리를 했다. 하지만 위의 방식보단 JS에서 제공하는 for(let x of arr) 방식으로 처리했으면 더? 좋은 것은 모르겠으나 하나의 방법이라고 생각한다.