[입문][JS][02.19] 프로그래머스 코딩테스트

2025. 2. 20. 03:33· [LG 유플러스] 유레카/코딩테스트
목차
  1. 외계어 사전
  2.  
  3. 종이 자르기
  4. 직사각형 넓이 구하기
  5. 로그인 성공?
  6. 치킨 쿠폰
  7. 등수 매기기
  8. 저주의 숫자 3
  9. 유한소수 판별하기
  10. 문자열 밀기
  11. 특이한 정렬
  12. 다항식 더하기
  13. 최빈값 구하기
  14. OX퀴즈
  15. 다음에 올 숫자
  16. 연속된 수의 합
  17. 분수의 덧셈
  18. 안전지대
  19. 겹치는 선분의 길이
  20. 평행
  21. 옹알이 (1)
  22.  
  23. 머쓱이 획득

외계어 사전

function solution(spell, dic) {
    var answer = 2;
    let target = spell.sort().join("");
    
    for (let word of dic) {
        if (word.split("").sort().join("") === target) {
            return 1;
        }
    }
    
    return answer;
}

 

종이 자르기

function solution(M, N) {
    var answer = M*N-1;
    return answer;
}

직사각형 넓이 구하기

function solution(dots) {
    var answer = 0;
    let minX = dots[0][0];
    let maxX = dots[0][0];
    let minY = dots[0][1];
    let maxY = dots[0][1];
    
    for(i = 1; i < 4; i++){
        if(dots[i][0] < minX){
            minX = dots[i][0];
        } else if(dots[i][0] > maxX){
            maxX = dots[i][0];
        }
        
        if(dots[i][1] < minY){
            minY = dots[i][1];
        } else if(dots[i][1] > maxY){
            maxY = dots[i][1];
        }
    }

    answer = (maxX - minX) * (maxY - minY);
    return answer;
}

로그인 성공?

function solution(id_pw, db) {
    var answer = '';
    for (let i = 0; i < db.length; i++) {
        if (db[i][0] == id_pw[0]) {  
            if (db[i][1] == id_pw[1]) { 
                return "login";
            } else {
                return "wrong pw";
            }
        }
    }
    return "fail";
}

치킨 쿠폰

function solution(chicken) {
    var answer = 0;
    let coupons = chicken;

    while (coupons >= 10) {
        let newService = Math.floor(coupons / 10);  
        answer += newService;
        coupons = coupons % 10 + newService;
    }
    return answer;
}

등수 매기기

function solution(score) {
    var answer = [];
    let avg = [];
    for(i = 0; i<score.length; i++){
        avg.push((score[i][0] + score[i][1]) / 2);
    }
    let sorted = [...avg].sort((a,b)=>b-a);
    for(a of avg){
        answer.push(sorted.indexOf(a) + 1);
    }
    return answer;
}

저주의 숫자 3

function solution(n) {
    var count = 0;
    let num = 1;
    while (count < n) {
        if (num % 3 !== 0 && !num.toString().includes('3')) {
            count++;
        }
        num++;
    }
    return num - 1;
}

유한소수 판별하기

function solution(a, b) {
    function gcd(x, y) {
        while (y !== 0) {
            let temp = y;
            y = x % y;
            x = temp;
        }
        return x;
    }
    let gcdValue = gcd(a, b);
    b /= gcdValue; 
    while (b % 2 === 0) {
        b /= 2;
    }
    while (b % 5 === 0) {
        b /= 5;
    }
    if (b === 1) {
        return 1; 
    } else {
        return 2;
    }
}

문자열 밀기

function solution(A, B) {
    var answer = -1;
    let tempA = A;
    for (let i = 0; i < A.length; i++) {
        if (tempA === B) {
            return i;
        }
        tempA = tempA[tempA.length - 1] + tempA.slice(0, -1);
    }

    return answer;
}

특이한 정렬

function solution(numlist, n) {
    var answer = [];
    
    return numlist.sort((a, b) => {
        const difA = Math.abs(a - n);
        const difB = Math.abs(b - n);
        
        if (difA === difB) {
            if (a > b) return -1;
            if (a < b) return 1; 
            return 0;
        }
        return difA - difB;
    });
}

다항식 더하기

function solution(polynomial) {
    var answer = '';
    let x = 0;
    let cons = 0;
    const terms = polynomial.split(" + ");

    for (let term of terms) {
        if (term.includes("x")) { 
            if (term === "x") {
                x += 1;
            } else if (term === "-x") {
                x -= 1;
            } else {
                const inx = parseInt(term.replace("x", ""));
                x += inx;
            }
        } else { 
            cons += parseInt(term);
        }
    }

    let result = "";
    if (x !== 0) {
        if (x === 1) {
            result += "x";
        } else if (x === -1) {
            result += "-x";
        } else {
            result += x + "x";
        }
    }

    if (cons !== 0) {
        if (result) {
            result += " + " + cons;
        } else {
            result += cons;
        }
    }


    return result || "0";
}

최빈값 구하기

function solution(array) {
    var answer = 0;
    let freq = {};
    for (num of array) {
        freq[num] = (freq[num] || 0) + 1;
    }
    let sorted = Object.entries(freq).sort((a, b) => b[1] - a[1]);
    if (sorted.length === 0 || sorted[0][1] !== sorted[1]?.[1]) {
        return parseInt(sorted[0][0]);
    }
    return -1;
}

OX퀴즈

function solution(quiz) {
    var answer = [];
    for (let i = 0; i < quiz.length; i++) {
        let arr = quiz[i].split(" ");
        let num1 = parseInt(arr[0]);
        let operator = arr[1]; 
        let num2 = parseInt(arr[2]);
        let result = parseInt(arr[4]);

        let calc;
        if (operator === "+") {
            calc = num1 + num2;
        } else if (operator === "-") {
            calc = num1 - num2;
        }

        if (calc === result) {
            answer.push("O");
        } else {
            answer.push("X");
        }
    }
    return answer;
}

다음에 올 숫자

function solution(common) {
    const dif = common[1] - common[0];
    const ratio = common[1] / common[0];

    if (common[2] - common[1] == dif) {
        return common[common.length - 1] + dif;
    }else {
        return common[common.length - 1] * ratio;
    }
}

연속된 수의 합

function solution(num, total) {
    var answer = [];
    let start = Math.floor(total / num - (num - 1) / 2);
    for (let i = 0; i < num; i++) {
        answer.push(start + i);
    }
    return answer;
}

분수의 덧셈

function solution(numer1, denom1, numer2, denom2) {
    function gcd(a, b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }
    function lcm(a, b) {
        return (a * b) / gcd(a, b);
    }
    let denom = lcm(denom1, denom2);
    let nume = numer1 * (denom / denom1) + numer2 * (denom / denom2);
    let divisor = gcd(nume, denom);
    return [nume / divisor, denom / divisor];
}

안전지대

function solution(board) {
    const n = board.length;
    const m = board[0].length;
    const directions = [[-1, 0], [1, 0], [0, -1], [0, 1], [-1, -1], [-1, 1], [1, -1], [1, 1]];
    let danger = Array.from({ length: n }, () => Array(m).fill(false));

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < m; j++) {
            if (board[i][j] == 1) {
                for (let [dx, dy] of directions) {
                    const ni = i + dx;
                    const nj = j + dy;
                    if (ni >= 0 && ni < n && nj >= 0 && nj < m) {
                        danger[ni][nj] = true;
                    }
                }
            }
        }
    }
    let count = 0;
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < m; j++) {
            if (board[i][j] == 0 && !danger[i][j]) {
                count++;
            }
        }
    }

    return count;
}

겹치는 선분의 길이

function solution(lines) {
    let covered = Array(200);
    for (let line of lines) {
        let start = line[0] + 100;
        let end = line[1] + 100;
        for (let i = start; i < end; i++) {
            covered[i] = (covered[i] || 0) + 1;
        }
    }
    let length = 0;
    for (let i = 0; i < 200; i++) {
        if (covered[i] >= 2) {
            length++;
        }
    }
    return length;
}

평행

function solution(dots) {
    const calcSlope = (point1, point2) => (point2[1] - point1[1]) / (point2[0] - point1[0]);

    for (let i = 0; i < 3; i++) {
        for (let j = i + 1; j < 4; j++) {
            for (let k = 0; k < 3; k++) {
                for (let l = k + 1; l < 4; l++) {
                    if (i !== k && i !== l && j !== k && j !== l) {
                        if (calcSlope(dots[i], dots[j]) === calcSlope(dots[k], dots[l])) {
                            return 1; 
                        }
                    }
                }
            }
        }
    }
    
    return 0;
}

옹알이 (1)

function solution(babbling) {
    var answer = 0;
    const sounds = ["aya","ye","woo","ma"];
    babbling.forEach(word => {
     let wordLength = word.length;
     for(let i = 0 ; i < sounds.length ; i++) {
       if(word.includes(sounds[i])) 
         wordLength = wordLength - sounds[i].length;
       if(!wordLength) {
         answer++;
         break;
       }
     }
    })        
    return answer;
}

 

머쓱이 획득

17, 18일 해커톤 참여로 이틀을 빠졌더니 몰아서 하는게 힘들었다. 시간날 때 조금씩 해둘걸... 다음부턴 몰아서 하는일 없도록 해야겠다.

'[LG 유플러스] 유레카 > 코딩테스트' 카테고리의 다른 글

[JS]프로그래머스 - 카펫 (Lv.2)  (0) 2025.02.20
[JS]프로그래머스 - 최댓값과 최솟값 (Lv.2)  (0) 2025.02.20
[입문][JS][02.16] 프로그래머스 코딩테스트  (0) 2025.02.16
[입문][JS][02.15] 프로그래머스 코딩테스트  (0) 2025.02.15
[기초][JAVA][02.14] 프로그래머스 코딩테스트  (0) 2025.02.14
  1. 외계어 사전
  2.  
  3. 종이 자르기
  4. 직사각형 넓이 구하기
  5. 로그인 성공?
  6. 치킨 쿠폰
  7. 등수 매기기
  8. 저주의 숫자 3
  9. 유한소수 판별하기
  10. 문자열 밀기
  11. 특이한 정렬
  12. 다항식 더하기
  13. 최빈값 구하기
  14. OX퀴즈
  15. 다음에 올 숫자
  16. 연속된 수의 합
  17. 분수의 덧셈
  18. 안전지대
  19. 겹치는 선분의 길이
  20. 평행
  21. 옹알이 (1)
  22.  
  23. 머쓱이 획득
'[LG 유플러스] 유레카/코딩테스트' 카테고리의 다른 글
  • [JS]프로그래머스 - 카펫 (Lv.2)
  • [JS]프로그래머스 - 최댓값과 최솟값 (Lv.2)
  • [입문][JS][02.16] 프로그래머스 코딩테스트
  • [입문][JS][02.15] 프로그래머스 코딩테스트
leeemingyu
leeemingyu
leeemingyu
ye
leeemingyu

블로그 메뉴

  • GitHub
  • Instagram
    전체
    오늘
    어제
    • 전체보기 (68)
      • GDSC (4)
        • 실시간 채팅 구현 (4)
      • [LG 유플러스] 유레카 (63)
        • Today I Learned (37)
        • 코딩테스트 (22)
        • 프로젝트 (4)

    공지사항

    인기 글

    최근 댓글

    최근 글

    hELLO · Designed By 정상우.v4.2.2
    leeemingyu
    [입문][JS][02.19] 프로그래머스 코딩테스트
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.