728x90
1. 양꼬치
function solution(n, k) {
k = k - Math.floor(n/10)
return 12000*n + 2000*k
}
2. 369게임
function solution(order) {
return order.toString().split("").filter((el)=>el==3||el==6||el==9).length
}
3. 완주하지 못한 선수
function solution(participant, completion) {
participant.sort()
completion.sort()
for(let i = 0 ;i<participant.length; i++){
if(participant[i] !== completion[i]) return participant[i]
}
}
4. 문자열 내 마음대로 정렬하기
function solution(strings, n) {
return strings.sort().sort((a,b)=> {
if(a[n]>b[n]) return 1
else if(a[n]==b[n]) return 0
else return -1
})
}
5. 유한소수 판별하기
function solution(a, b) {
let maxD = a
let [c,d] = a>b ? [a,b] : [b,a]
for(let r;r=c%d;c=d,d=r){maxD = r}
b = b/maxD
while(true){
if(b<=1) return 1
if(b%2 && b%5) return 2
if(b%2==0) b= b/2
if(b%5==0) b= b/5
}
}
다른 사람 풀이 본 후
function solution(a, b) {
return Number((a / b).toFixed(10)) == a / b ? 1 : 2;
}
6. 두개 뽑아서 더하기
function solution(numbers) {
var answer = [];
for(let i = 0 ; i<numbers.length; i++){
for(let k = i+1; k<numbers.length; k++){
if(answer.indexOf(numbers[i] + numbers[k]) == -1) {
answer.push(numbers[i] + numbers[k])
}
}
}
return answer.sort((a,b)=>a-b);
}
다른 사람 풀이 본후
function solution(numbers) {
const temp = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j]);
}
}
const answer = [...new Set(temp)];
return answer.sort((a, b) => a - b);
}
new Set으로 객체를 만들어 배열의 중복을 제거 할수 있다.
중복 제거 후 배열의 형태로 다시 변환해 줘야 한다.
7. 연속된 수의 합
function solution(num, total) {
let answer = [];
if(total%num == 0){
answer.push(total/num)
for(let i = 1; i<num/2; i++){
answer.unshift(total/num-i)
answer.push(total/num+i)
}
}else{
for(let i = 1; i<=num/2; i++){
answer.unshift(Math.ceil(total/num-i))
answer.push(Math.ceil(total/num+i)-1)
}
}
return answer
}
다른 사람 풀이 본 후
function solution(num, total) {
var min = Math.ceil(total / num - Math.floor(num / 2));
var max = Math.floor(total / num + Math.floor(num / 2));
return new Array(max - min + 1).fill(0).map((el, i) => {
return i + min;
});
}
new Array(배열길이).fill(0으로 채우기)
8. 최빈값 구하기
function solution(array) {
let obj = {};
for (let i = 0; i < array.length; i++) {
obj[array[i]] = (obj[array[i]] || 0) + 1
}
const answer = Object.keys(obj).sort((a, b) => obj[b] - obj[a]);
return obj[answer[0]] == obj[answer[1]] ? -1 : +answer[0];
}
다른사람 풀이 본 후
function solution(array) {
let m = new Map();
for (let n of array) m.set(n, (m.get(n) || 0) + 1);
m = [...m].sort((a, b) => b[1] - a[1]);
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
Map으로 객체 만들기
9. 다항식 더하기
function solution(polynomial) {
let coefficient = 0;
let constant = 0;
polynomial = polynomial.split(" + ");
for (let i = 0; i < polynomial.length; i++) {
if (polynomial[i].includes("x"))
coefficient += parseInt(polynomial[i]) || 1;
else constant += +polynomial[i];
}
if (coefficient == 1) coefficient = "";
const answer = [coefficient + "x", constant.toString()];
return answer.filter((v) => v[0] != 0).join(" + ");
}
다른사람 풀이 본 후 배운부분
var [x, c] = p.split("+").reduce(
([a, b], s) => {
if (s.includes("x")) {
return [a + Number(s.trim().replace("x", "") || 1), b];
}
return [a, b + Number(s)];
},
[0, 0]
);
reduce에 배열을 넣을 생각을 못했는데 이 풀이를 보고 알았다.
10. 소수 찾기
function solution(n) {
var answer = 0;
for (let i = 3; i <= n; i += 2) {
let num = true;
for (let k = 2; k <= Math.sqrt(i); k++) {
if (i % k == 0) {
num = false;
break;
}
}
if (num) answer += 1;
}
if (n >= 2) answer += 1;
return answer;
}
짝수는 2로 나누어 떨어지므로 2를 제외한 짝수는 소수가 아니기 때문에 반복문에서 제외
11. 모의고사
function solution(answers) {
const length = answers.length;
let a = "12345".repeat(Math.ceil(length / 5));
let b = "21232425".repeat(Math.ceil(length / 8));
let c = "3311224455".repeat(Math.ceil(length / 10));
let answer = [0, 0, 0];
for (let i = 0; i < answers.length; i++) {
if (answers[i] == +a[i]) answer[0] += 1;
if (answers[i] == +b[i]) answer[1] += 1;
if (answers[i] == +c[i]) answer[2] += 1;
}
const max = Math.max(...answer);
return answer
.map((v, index) => [v, index + 1])
.filter((v) => v[0] == max)
.map((v) => v[1]);
}
12. 포켓몬
function solution(nums) {
return Math.min([...new Set(nums)].length, nums.length / 2);
}
13. 로또 최고순위와 최저순위
function solution(lottos, win_nums) {
const correct = lottos.filter((v) => win_nums.includes(v)).length;
const mistery = lottos.filter((v) => !v).length;
const high = Math.min(6, 7 - correct - mistery);
const low = Math.min(6, 7 - correct);
return [high, low];
}
14. 소수만들기
function solution(nums) {
let plus = [];
let answer = 0;
for (let i = 0; i < nums.length - 2; i++) {
for (let k = i + 1; k < nums.length - 1; k++) {
for (let j = k + 1; j < nums.length; j++) {
plus.push(nums[i] + nums[k] + nums[j]);
}
}
}
for (let i = 0; i < plus.length; i++) {
let sosu = true;
if (plus[i] % 2 == 0) continue;
for (let k = 3; k <= Math.sqrt(plus[i]); k += 2) {
if (plus[i] % k == 0) {
sosu = false;
break;
}
}
if (sosu) answer += 1;
}
return answer;
}
728x90
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘] 알고리즘 문제 풀이 순서 (0) | 2022.11.02 |
---|---|
[코딩테스트] 프로그래머스 문제모음 (0) | 2022.11.02 |
[코딩테스트] 프로그래머스 문제 (0) | 2022.09.29 |
[BigO] 객체와 배열 (1) | 2022.09.29 |
[코딩테스트] 프로그래머스 문제 모음 (0) | 2022.09.28 |