본문 바로가기

알고리즘28

[Lv.1] 과일 장수 (예제로 알아보는 JS 배열의 시간복잡도) 1. 문제 2. 풀이 1 ( 안되는 풀이) function solution(k, m, score) { var answer = 0; let arr = score.sort((a,b)=>b-a) 큰 순서대로 배열을 정렬 while(arr.length>=m){ m으로 나눠지지 않을때까지 let f = arr.splice(0,m); 앞쪽부터 m만큼 잘라서 answer+= m * Math.min(...f) 자른것의 최소값(점수) * 갯수(m) 을 answer에 계속 더해준다. } return answer; //하지만 이거 안된다. } 이렇게 풀었는데 시간초과로 통과를 못하네? 로직은 맞는데..? 그래서 한참 검색하다가 발견한 이유 배열 메소드의 시간복잡도 때문이다. 시간 복잡도를 표기할 땐 대체로 빅오 표기법으로 .. 2023. 2. 2.
[Lv.1] 비밀지도 1. 문제 2. 전략 1) 지도1과 지도2 배열 각각 10진수를 2진수로 변경하여 spread연산자로 펼쳐서 0과 1로 된 배열 생성 2) 생성된 지도1배열과 지도2배열을 비교하여 1이 존재하는 좌표는"#", 두 좌표 모두 0인 경우 0으로 치환 3) 각각의 배열을 array.join('') 으로 연결하여 출력 function solution(n, arr1, arr2) { var answer = []; let a1 = []; let a2 = []; // 2진수의 a1 배열 생성 for(i in arr1){ //정사각형이므로 arr1, arr2 둘다 같은수 반복으로 사용가능 a1.push([...arr1[i].toString(2)]) a2.push([...arr2[i].toString(2)]) } //00.. 2023. 1. 31.
[Lv.0] 안전지대 (2차원 배열과 경우의수) 1. 문제 2. 전략 1) 지뢰의 좌표를 찾는다. 2) 지뢰의 좌표로부터 상하좌우 8칸이 0이라면 'x'로 바꾼다 (지뢰가 여러개일수 있으므로 1이면 그대로 1로 둔다.) 3) 만약 지뢰가 좌상끝/좌끝/좌하끝/우상끝/우끝/우하끝/상끝/하끝 인 경우를 고려해야한다. 4) * 풀이 도중 board[삼항연산자][삼항연산자] 의 방법에 오류가 있어 별도의 함수를 만들어 풀었다. function solution(board) { var answer = 0; let n = board.length-1; // board는 어떤수x어떤수의 정사각형 형태이므로 // let n = board의 요소의 마지막index혹은 board의 마지막index let ifNeg = (a)=>{ // ifNeg는 파라미터 자신이 음수면 0.. 2023. 1. 30.
[Lv.0] 평행(복잡한 계산문제에서의 전략) 1. 문제 2. 전략 1) 두개의 점을 이은 선분의 기울기는 (x2-x1)/(y2-y1) 이다. 2) for 반복문을 이용해서 가능한 선분의 모든 기울기를 newArray에 push한다. 3) newArray에 중복값이 있으면 평행한 선분을 그을 수 있다. function solution(dots) { var answer = 0; let allArr = []; for(let i =0; i 2023. 1. 30.
[Lv.0] 외계어 사전 1. 문제 2. 전략 1) 일단 spell의 전체길이와 dic의 글자수가 다른 요소는 어차피 발음 못하므로 삭제한다. 2) dic의 각 글자에서 spell의 글자들과 비교하여 일치하는 경우 '' 으로 replace 시킨다. (중복된 원소가 없으므로 한번만 검사하면 된다) 3) 작업된 배열 중에서 글자가 모두 교체되어 ''가 된 요소가 1개 이상일 경우 spell의 알파벳을 한번만 사용한 단어가 dic에 존재하므로 answer =1 이다. function solution(spell, dic) { var answer = 2; let newDic = []; //중복되지 않으며, spell의 원소 모두를 사용해야하므로 dic의 요소 중에서 spell의 전체의 길이와 //같은 요소만을 필터해서 newDic에 모아.. 2023. 1. 30.
[Lv.0] 영어가 싫어요(.replaceAll()) 1. 문제 2. 풀이 function solution(numbers) { let numberEn = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] let sum = numbers for(let i =0; i 2023. 1. 30.
[Lv.0] 7의 개수 1. 문제 2. 풀이 function solution(array) { let count = 0; for(let i =0; i< array.length; i++){ // 배열의 개수만큼 순회하며 아래 실행. let f = array[i].toString().indexOf('7'); //각 요소 중 7의 첫번째 인덱스를 반환 (indexOf()는 요소가 없으면 -1을 반환한다) while(f !=-1){ //7이 있으면 계속 실행하며 count를 올려 개수를 세준다. count++; f = array[i].toString().indexOf('7', f + 1) // indexOf의 두번째 파라미터(option)를 +1해주며 검색을 계속 진행 } } var answer = count; return answer.. 2023. 1. 30.
[Lv.0] 합성수 찾기 1. 문제 2. 풀이 function solution(n) { var answer = 0; let count = []; for(i= 2; i set -> array의 과정을 거치며 중복값을 제거하는 용도로도 사용 가능하다. 3) 축약형으로 : - let b = [...new Set(a)] ; 로 축약하여 중복값을 제거할 수 있다. 2023. 1. 30.