코딩 테스트/프로그래머스 level1 56

실패율

처음에는 객체를 생성해서 풀어나갔는데 마지막 내림차순부분에서 객체의 값을 비교하는것이 하자면 할 수 있겠지만 난잡해져서 배열로 다시 풀었다 코드 function solution(N, stages) { let result = []; let failLateArr = new Array(N).fill(0); let peopleLen = stages.length; stages = stages.sort(); // 실패율 들어간 배열 만들기 for (let i = 0; i < N; i++) { let count = 0; for (let j = 0; j < stages.length; j++) { if (stages[j] === i + 1) count++; } failLateArr[i] = peopleLen !== 0 ..

완주하지 못한 선수

코드 각 이름을 비교해서 같으면 배열에서 삭제하는 방법 function solution(participant, completion) { for (let i = 0; i < participant.length; i++) { for (let j = 0; j < completion.length; j++) { if (participant[i] === completion[j]) { participant.splice(i, 1); completion.splice(j, 1); i--; j--; break; } } } return participant[0]; } 이 코드는 시간복잡도 O(N^2)인데 정확성 통과는 했지만 효율성에서 막혔다 수정 코드 완주자을 순회하면서 완주자의 이름을 참가자에서 찾아서 삭제 function..

소수 만들기

아이디어 삼중 for문으로 nums배열을 더하고 에라토스테네스의 채를 사용하여 소수 판별을 했다 코드 function solution(nums) { let count = 0; for (let i = 0; i < nums.length - 2; i++) { for (let j = i + 1; j < nums.length - 1; j++) { for (let k = j + 1; k < nums.length; k++) { let sum = nums[i] + nums[j] + nums[k]; if (isPrime(sum)) count++; } } } return count; } function isPrime(num) { if (num

숫자 문자열과 영단어

아이디어 정규표현식 replace 쓰면되겠다 코드 function solution(s) { const result = s .replace(/zero/g, 0) .replace(/one/g, 1) .replace(/two/g, 2) .replace(/three/g, 3) .replace(/four/g, 4) .replace(/five/g, 5) .replace(/six/g, 6) .replace(/seven/g, 7) .replace(/eight/g, 8) .replace(/nine/g, 9); return Number(result); } 다른 방식의 코드 (split과 join활용) function solution(s) { let numbers = ["zero", "one", "two", "three",..

신규 아이디 추천

아이디어 정규표현식을 쓰는것. 처음 코드 function solution(new_id) { new_id = new_id .toLowerCase() .replace(/[^a-z0-9-_.]/g, "") .replace(/\.\.+/g, ".") .replace(/^\.|\.$/g, ""); if (new_id === "") new_id = "a"; if (new_id.length >= 16) new_id = new_id.slice(0, 15); new_id = new_id.replace(/\.$/, ""); while (new_id.length < 3) { new_id += new_id[new_id.length - 1]; } return new_id; } 더 좋은 코드 function solution(ne..

로또의 최고 순위와 최저 순위

아이디어 최소 당첨 갯수 = 두 배열에서 일치하는 숫자 최대 당첨 갯수 = 최소 당첨 갯수 + lottos의 0의 갯수 6개 일치가 1등 5개 일치가 2등 ... 이므로 등수는 7 - 일치갯수 (하지만 0개 일치는 6등임) 코드 function solution(lottos, win_nums) { let matchCount = 0; let zeroCount = 0; // 두 배열에서 일치하는 숫자 갯수 구함 lottos.forEach((ele) => { if (win_nums.includes(ele)) matchCount++; // lottos 배열에서 0의 갯수 구함 zeroCount = lottos.filter((ele) => 0 === ele).length; }); let { max, min } = ..

신고 결과 받기

아이디어 객체화 시켜서 푼다 처음에는 신고자 : 피신고자로 객체화 했는데 k값을 넘는 피신고자를 찾으려면 피신고자 : 신고자로 하고 피신고자의 길이를 보면 되니까 이렇게 바꿨다 처음에는 제제받는사람까지 구한후 result값을 또 새로 객체를 만들어서 신고자 : 제제받는 피신고자 이렇게 해야하나 싶었다 (이러면 쓸데없이 객체하나 더 만드는거 같았다) 고민하다가 let result = new Array(id_list.length).fill(0)로 0으로 채워진 배열을 만들고 제제받는 사람을 키 값으로 가지고 있는 값들의 list인덱스를 직접 result의 인덱스에 매칭시켜서 ++해줬다 코드 function solution(id_list, report, k) { //객체화 시켜서 let obj = {}; le..

체육복

아이디어 이중for문을 이용한 완전탐색으로 푼다 -> 마지막 제한사항을 적용하지 못했음 -> 우선 여벌 체육복있는 사람이 잃어버렸을 경우를 먼저 계산한 후에 나머지를 계산함 -> reserve와 lost가 정렬되지않은채로 주어짐... 코드 function solution(n, lost, reserve) { lost = lost.sort((a,b)=>a-b) reserve = reserve.sort((a,b)=>a-b) for (let i = 0; i < reserve.length; i++) { if (lost.includes(reserve[i])) { lost.splice(lost.indexOf(reserve[i]), 1); reserve.splice(i, 1); i-- } } for (let i = 0..