728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/77884

 

코딩테스트 연습 - 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주

programmers.co.kr

 

코드


const getYakSu = (num) => {
    let yaksu = [];
    for (let i=1; i<=num; i++) { //1부터 num까지
        if (num % i === 0) yaksu.push(i); //나누어 떨어지면 약수에 추가
    }
    for (let i=0; i<yaksu.length; i++) {
        if (yaksu.length % 2 === 0) return true; //약수의 개수가 짝수라면 true
        else return false; //아니면 false
    }
};

function solution(left, right) {
    let answer = 0;
    for (let i=left; i<=right; i++) { //left부터 right까지 (둘다 포함)
        if (getYakSu(i) === true) answer += i; //약수개수가 짝수라면 더하기
        else answer -= i; //아니면 빼기
    }
    return answer;
}

 

후기


  • solution함수에 코딩을 다 해볼까 하다가 함수를 따로 만들어서 코딩해보았다
  • 자바스크립트 문제를 풀다가 종종 "const 변수명 = (매개변수) => {};" 형태의 함수인지 객체인지 모를 것들을 많이 보곤했는데 이 문제를 풀면서 해당 문법에 대해 찾아보게 되었고, ES6문법에서 새로 추가된 Arrow Function (애로우 함수)이란 것을 알게 되었다
  • 찾아보니 일반 function과의 차이점은 크게 다를 것은 없으나 몇 가지 차이점이 있긴 있었다. 나중에 이에 대해 자세히 포스팅해봐야겠다!
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/87389

 

코딩테스트 연습 - 나머지가 1이 되는 수 찾기

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 입

programmers.co.kr

 

코드


function solution(n) {
    let answer = 0;
    while (true) {
        if (n%answer === 1) return answer; //나머지가 1이라면 답으로 return
        else answer++; //아니면 +1 하기
    }
}

 

후기


  • 자신감을 찾기 위해 쉬운 문제를 풀어보았다!
728x90

문제


https://www.acmicpc.net/problem/6996

 

6996번: 애너그램

첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어

www.acmicpc.net

 

코드


const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\r\n');

//input[0] = '3'
//input[1] = 'blather reblath'
//input[2] = 'maryland landam'
//input[3] = 'bizarre brazier'

let anagrams = [];
let anagram = [];
const len = parseInt(input[0]); //3

for (let i=1; i<=len; i++) { //input의 index가 1~3이기 때문에 1부터 시작
    anagrams.push(input[i].split(" ")); //배열화 시키기
}
//anagrams = [['blather', 'reblath'], ['maryland', 'landam'], ['bizarre', 'brazier']]

for (let j=0; j<anagrams.length; j++) {
    for (k=0; k<anagrams[j].length; k++) {
        anagram.push(anagrams[j][k].split("").sort().join("")); //문자열 오름차순으로 정렬
    }
}
//anagram = ['abehlrt', 'abehlrt', 'aadlmnry', 'aadlmn', 'abeirrz', 'abeirrz']

let m = 0;
for (let l=0; l<anagram.length; l+=2) {
    if (anagram[l] === anagram[l+1]) { // [0,1], [2,3], [4,5] << 이 index대로 각각 비교하여 일치하면 anagram
        console.log(`${anagrams[m][0]} & ${anagrams[m][1]} are anagrams.`); //출력할때는 원본을 출력해야 하니 anagrams배열에서 가져오기
        m++;
    }
    else {
        console.log(`${anagrams[m][0]} & ${anagrams[m][1]} are NOT anagrams.`);
        m++;
    }
}

// 결과
// blather & reblath are anagrams.
// maryland & landam are NOT anagrams.
// bizarre & brazier are anagrams.

 

후기


  • 문제를 보자마자 각 문자열을 정렬해서 일치하면 anagram 으로 판단해야겠다는 생각을 하였다
  • 내 풀이보다 for문을 더 줄이고 코드를 더 간결하게 하고 싶었으나 배열 이해 부족인지 문자열 이해 부족인지 쉽지 않았다
  • 다른 분들의 풀이를 보니 map을 이용해서 많이들 풀이하셨다! 마지막 출력하는 for문에서는 삼항연산자를 이용하면 더 간결해질 것 같다는 생각이 든다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12982?language=javascript 

 

코딩테스트 연습 - 예산

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는

programmers.co.kr

 

코드


function solution(d, budget) {
    let answer = 0;
    d.sort((a,b) => (a-b)); //오름차순 정렬

    for (let i of d) {
        if (i > budget) break; //배열의 원소가 budget보다 크다면 break
        else {
            budget -= i; //배열의 원소가 budget보다 크거나 같아질때까지 원소를 계속 빼기
            answer++; //정답 count 올리기
        }
    }
    return answer;
}

 

후기


  • 그리디 알고리즘을 이용하여 풀 수 있는 문제중에 쉬운 문제였다
  • 근데 처음에 if else 문 말고 while문으로 접근을 했었고, answer에 d의 요소들을 더해나가는 방식으로 알고리즘을 짰는데 왜인지 오류가 나서 빼주는 방식으로 접근을 달리 했더니 쉽게 해결할 수 있었다!

+ Recent posts