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;
}
- my_string을 split(letter)로 나누면 letter를 기준으로 문자열이 배열로 분할된다.
- 그 후, join('')을 사용하여 나뉜 배열을 다시 합친다. 이때 ''는 빈 문자열을 나타낸다.
- 따라서, 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]에 있는 값들 중에서 주어진 각도보다 작거나 같은 값의 개수를 반환하는 함수입니다.
분석을 해보면:
- filter 함수를 사용하여 배열 [0, 90, 91, 180]에서 주어진 각도보다 작거나 같은 값들을 모두 필터링합니다.
- 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를 받아서 어떤 계산을 수행한 후 결과값을 반환하는 함수입니다. 코드를 간단히 해석하면 다음과 같습니다:
- k에 ~~(n/10)를 빼라: n을 10으로 나눈 몫을 소수점 아래를 버리고 빼라.
- k가 0보다 작다면 0으로 만들어라.
- n * 12000 + k * 2000의 결과를 반환하라.
간단한 예시를 통해 설명하겠습니다. 예를 들어, n이 30이고 k가 5이라면:
- k -= ~~(n/10);: n을 10으로 나눈 몫인 3을 k에서 빼라. 따라서 k는 5 - 3 = 2가 됩니다.
- if (k < 0) k = 0;: k가 0보다 작으면 k를 0으로 만들어라. 현재 k는 2이므로 이 조건은 만족하지 않습니다.
- return n * 12000 + k * 2000;: 최종적으로 30 * 12000 + 2 * 2000으로 계산되어 결과는 360000입니다.
틸트 문법에 대한 설명(by chatGPT)
해당 코드에서 사용된 틸트(~~) 연산자는 비트 연산자를 활용하여 소수점 이하를 버리는 연산을 수행합니다. 틸트 연산자를 사용하는 경우 소수점 아래의 모든 비트를 삭제하고 정수 부분만을 남기게 됩니다. 이것은 Math.floor() 함수와 비슷한 역할을 하지만, 틸트 연산자가 더 빠르게 동작하는 특성이 있습니다.
코드에서의 k-=~~(n/10); 부분을 예로 들어보면:
- n을 10으로 나눈 몫을 계산합니다.
- 이 몫에 대해 틸트(~~) 연산을 수행하여 소수점 이하를 제거합니다.
- 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;
}
'Programmers(JavaScript)' 카테고리의 다른 글
[프로그래머스 자바스크립트] '폰켓몬' 풀어보기 (2) | 2024.07.16 |
---|---|
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 9,10 풀어보기 (0) | 2024.02.14 |
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 8 풀어보기 (0) | 2024.02.13 |
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 4,5 풀어보기 (1) | 2024.02.10 |
[프로그래머스 자바스크립트] 코딩테스트 입문 Day 1,2,3 풀어보기 (1) | 2024.02.10 |