[프로그래머스 자바스크립트] 코딩테스트 입문 Day 6,7 풀어보기

2024. 2. 13. 01:15·Algorithm/Programmers(JavaScript)

Day 6

 

문자열 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/120822

function solution(my_string) {
    
    let answer_string = '';
    
    // my_string의 끝에 있는 문자부터 answer_string에 넣어주기
    for(var i = my_string.length - 1; i >= 0; i--) {
        answer_string += my_string[i];
    }
    
    return answer_string;
}

직각삼각형 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/120823

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
    
    
}).on('close', function () {
    
    let num = parseInt(input[0]);
    
    
    for(let i = 1; i <= num; i++) {
        let answer_line = '';
        
        for(let j = 1; j <= i; j++) {
            answer_line += '*';
        }
        
        console.log(answer_line);
    }
    
    
});

짝수 홀수 개수

https://school.programmers.co.kr/learn/courses/30/lessons/120824

function solution(num_list) {
    answer = [0, 0];
    for(let i = 0; i < num_list.length; i++) {
        
        // 짝수라면 answer[0]에 1 더해주기
        if(num_list[i] % 2 === 0) {
            answer[0]++;
        }
        
        // 홀수라면 answer[1]에 1 더해주기
        else {
            answer[1]++;
        }
    }
    
    return answer;
}

 

 

filters를 사용할 수도 있다.

function solution(num_list) {
  return [
    num_list.filter((num) => num % 2 === 0).length,
    num_list.filter((num) => num % 2 === 1).length,
  ];
}

문자 반복 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/120825

function solution(my_string, n) {
    
    let answer = '';
    
    for(let i = 0; i < my_string.length; i++) {
        answer += my_string[i].repeat(n);
    }
    
    return answer;
}

 

 

이렇게 풀 수도 있다.

function solution(my_string, n) {
    var answer = [...my_string].map(v => v.repeat(n)).join("");
    console.log(answer);
    return answer;
}

Day 7

특정 문자 제거하기

https://school.programmers.co.kr/learn/courses/30/lessons/120826

function solution(my_string, letter) {
    answer = '';
    
    for(let i = 0; i < my_string.length; i++) {
        if(my_string[i] !== letter) {
            answer += my_string[i];
        }
    }
    
    return answer;
}

다른 사람 풀이에서 본 split과 join을 이용한 신박한 풀이

function solution(my_string, letter) {
    const answer = my_string.split(letter).join('')
    return answer;
}
  1. my_string을 split(letter)로 나누면 letter를 기준으로 문자열이 배열로 분할된다.
  2. 그 후, join('')을 사용하여 나뉜 배열을 다시 합친다. 이때 ''는 빈 문자열을 나타낸다.
  3. 따라서, letter가 문자열에서 모두 제거된 결과가 answer 변수에 저장되고 반환된다.

아니면 그냥 replaceAll을 써도 된다.

function solution(my_string, letter) {
    return my_string.replaceAll(letter, "");
}

각도기

https://school.programmers.co.kr/learn/courses/30/lessons/120829

function solution(angle) {
    if(angle > 0 && angle < 90) {
        return 1;
    }
    else if (angle === 90 ) {
        return 2;
    }
    else if (angle > 90 && angle < 180) {
        return 3;
    }
    else if (angle === 180) {
        return 4;
    }
}

 

filter를 사용하면 훨씬 편리해진다.

function solution(angle) {
    return [0, 90, 91, 180].filter(x => angle>=x).length;
}

이 코드는 주어진 각도(angle)를 기준으로, 배열 [0, 90, 91, 180]에 있는 값들 중에서 주어진 각도보다 작거나 같은 값의 개수를 반환하는 함수입니다.

 

분석을 해보면:

  1. filter 함수를 사용하여 배열 [0, 90, 91, 180]에서 주어진 각도보다 작거나 같은 값들을 모두 필터링합니다.
  2. filter로 걸러진 배열의 길이를 반환합니다. 이는 주어진 각도보다 작거나 같은 값의 개수를 나타냅니다.

간단한 예시를 통해 설명하겠습니다. 예를 들어, angle이 92이라면, 배열 [0, 90, 91, 180]에서 90, 91은 조건을 만족하므로 이 값들이 남게 됩니다. 따라서, 최종적으로 filter된 배열의 길이는 2가 되어 함수는 2를 반환합니다.

 

삼항연산자를 사용하는 방법

function solution(angle) {
    return angle < 90 ? 1 : angle === 90 ? 2 : angle < 180 ? 3 : 4;
}

양꼬치

https://school.programmers.co.kr/learn/courses/30/lessons/120830

function solution(n, k) {
    let answer = 0;
    
    // answer에 양꼬치 개수 * 12000을 더해준다.
    answer += n * 12000;
    
    // 사람들이 몇 인분을 먹었는지 -> 양꼬치의 개수에서 10을 나눈 몫
    let people_cnt = parseInt(n / 10);
    
    // answer에 음료수 개수에서 사람들이 몇 인분 먹었는지를 빼고 2000을 곱해준다.
    answer += (k-people_cnt) * 2000;
    
    return answer;
    
}

 

틸트 문법으로 풀 수 있다고 한다.

function solution(n, k) {
    k-=~~(n/10);
    if (k < 0) k = 0;
    return n*12000+k*2000;
}

 

이 코드는 두 개의 매개변수 n과 k를 받아서 어떤 계산을 수행한 후 결과값을 반환하는 함수입니다. 코드를 간단히 해석하면 다음과 같습니다:

  1. k에 ~~(n/10)를 빼라: n을 10으로 나눈 몫을 소수점 아래를 버리고 빼라.
  2. k가 0보다 작다면 0으로 만들어라.
  3. n * 12000 + k * 2000의 결과를 반환하라.

간단한 예시를 통해 설명하겠습니다. 예를 들어, n이 30이고 k가 5이라면:

  1. k -= ~~(n/10);: n을 10으로 나눈 몫인 3을 k에서 빼라. 따라서 k는 5 - 3 = 2가 됩니다.
  2. if (k < 0) k = 0;: k가 0보다 작으면 k를 0으로 만들어라. 현재 k는 2이므로 이 조건은 만족하지 않습니다.
  3. return n * 12000 + k * 2000;: 최종적으로 30 * 12000 + 2 * 2000으로 계산되어 결과는 360000입니다.

 

틸트 문법에 대한 설명(by chatGPT)

해당 코드에서 사용된 틸트(~~) 연산자는 비트 연산자를 활용하여 소수점 이하를 버리는 연산을 수행합니다. 틸트 연산자를 사용하는 경우 소수점 아래의 모든 비트를 삭제하고 정수 부분만을 남기게 됩니다. 이것은 Math.floor() 함수와 비슷한 역할을 하지만, 틸트 연산자가 더 빠르게 동작하는 특성이 있습니다.

코드에서의 k-=~~(n/10); 부분을 예로 들어보면:

  1. n을 10으로 나눈 몫을 계산합니다.
  2. 이 몫에 대해 틸트(~~) 연산을 수행하여 소수점 이하를 제거합니다.
  3. k에서 이 값을 빼주어서 결과적으로 k에는 n을 10으로 나눈 몫의 정수 부분이 저장됩니다.

간단한 예제를 통해 설명하겠습니다. 만약 n이 25이면, 25 / 10의 몫은 2.5입니다. 틸트 연산을 적용하면 2가 되므로, 최종적으로 k에서 2를 빼주게 됩니다. 이를 통해 소수점 아래를 버리고 정수 부분만을 사용하게 됩니다.


짝수의 합

https://school.programmers.co.kr/learn/courses/30/lessons/120831

function solution(n) {
    let sum = 0;
    for(let i = 1; i <= n; i++) {
        if(i % 2 == 0) {
            sum += i;
        }
    }
    return sum;
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Programmers(JavaScript)' 카테고리의 다른 글

[프로그래머스 자바스크립트] '폰켓몬' 풀어보기  (2) 2024.07.16
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 9,10 풀어보기  (1) 2024.02.14
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 8 풀어보기  (0) 2024.02.13
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 4,5 풀어보기  (2) 2024.02.10
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 1,2,3 풀어보기  (1) 2024.02.10
'Algorithm/Programmers(JavaScript)' 카테고리의 다른 글
  • [프로그래머스 자바스크립트] 코딩테스트 입문 Day 9,10 풀어보기
  • [프로그래머스 자바스크립트] 코딩테스트 입문 Day 8 풀어보기
  • [프로그래머스 자바스크립트] 코딩테스트 입문 Day 4,5 풀어보기
  • [프로그래머스 자바스크립트] 코딩테스트 입문 Day 1,2,3 풀어보기
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (178)
      • Frontend (31)
      • Fedify (4)
      • Study (42)
        • NestJS (2)
        • Node.js (3)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (21)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (10)
        • crohasang_page (3)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    KUIT
    인공지능
    fedify
    티스토리챌린지
    리액트
    typescript
    프론트엔드
    백준
    프로그래머스 자바스크립트
    시스템프로그래밍
    react
    javascript
    next.js
    알고리즘
    HTML
    프로그래머스
    오블완
    타입스크립트
    음악추천
    자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 6,7 풀어보기
상단으로

티스토리툴바