고양이와 코딩
[프로그래머스] 1월8일 ~ 1월14일 본문
728x90
1월8일
내적
내 풀이
function solution(a, b) {
let answer = 0;
for (let i = 0; i < a.length; i++){
answer += a[i]*b[i];
}
return answer;
}
가운데 글자 가져오기
내 풀이
function solution(s) {
let middle_char = '';
let middle_index = Math.floor(s.length / 2);
if ( s.length % 2 === 0){
middle_char = s.substring(middle_index - 1, middle_index + 1);
} else {
middle_char = s.charAt(middle_index);
}
return middle_char;
}
처음에는 s가 짝수일때 substring을 middle_index - 1부터 2까지로 설정했는데
이렇게 할 경우 "abcdef"에서 middle_index가 3일때 substirng()이 s.subsring(2, 2) 로 작동하기 때문에
시작과 끝 인덱스가 같은 것으로 인식하게 된다 !! 조심 ㅎㅎ
1월9일
수박수박수박수박수박수?
내 풀이
function solution(n) {
let watermelon = '';
for (let i = 0; i < n / 2; i++){
watermelon += '수';
watermelon += '박';
}
return watermelon.substring(0, n);
}
다른 사람의 풀이
const waterMelon = n => "수박".repeat(n).slice(0,n);
약수의 개수와 덧셈
내 풀이
function solution(left, right) {
let sum = 0;
for(let i = left; i <= right; i++){
let count = 0;
for (let j = 1; j <= i; j++){
if (i % j === 0){
count++;
}
}
if (count % 2 === 0){
sum += i;
} else {
sum -= i;
}
}
return sum;
}
다른 사람의 풀이
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
와 이런건 봐도 평생 활용도 못할거같다....
제곱근이 정수면 약수의 개수가 홀수다.....
문자열 내림차순으로 배치하기
내 풀이
function solution(s) {
return s.split('').sort().reverse().join('');
}
sort() 메서드는 문자열을 사전식으로 정렬하기 때문에, 대문자가 소문자보다 아스키 코드 값이 작다!
따라서 오름차순으로 정렬을 한 뒤 배열을 역으로 뒤집고, 합쳐준다.
1월12일
부족한 금액 계산하기
내 풀이
function solution(price, money, count) {
let answer = money;
let sum = 0;
for (let i = 1; i <= count; i++){
sum += price * i;
}
answer = sum - money;
return money > sum ? 0 : answer;
}
1월14일
문자열 다루기
힌트가 필요한가요? 보면 일단 통과 못할거라는 생각을 합니다!
첫 번째 코드
function solution(s) {
let arr = s.split('');
let arr_len = arr.length;
for (let i = 0; i < arr_len; i++) {
if ((arr_len === 4 || arr_len === 6) && /^[0-9]+$/.test(arr[i])) {
return true;
} else {
return false;
}
}
}
몇 테스트 케이스를 통과하지 못하길래 힌트 봤는데, 문자 e를 숫자로 인식할 수도 있다고 하네요.. (지수 표기법으로 읽을 수 있다면)
따라서 이를 예외처리 해주어야 합니다.
제출한 코드
function solution(s) {
let arr = s.split('');
let arr_len = arr.length;
for (let i = 0; i < arr_len; i++) {
if ((arr_len === 4 || arr_len === 6) && /^\d+$/.test(arr.join('')) && !/e/i.test(arr.join(''))) {
// /^\d+$/는 문자열이 0부터 9까지의 숫자로만 이루어져 있는지를 검사하는 정규표현식
// /e/i.test(arr.join(''))는 문자열에 'e'가 포함되어 있는지 검사
return true;
} else {
return false;
}
}
}
if문 조건!
- arr_len이 4 또는 6이어야 합니다.
- arr.join('')을 사용하여 배열을 문자열로 변환하고, /^\d+$/ 정규표현식을 사용하여 문자열이 0부터 9까지의 숫자로 이루어져 있는지 확인합니다.
- !/e/i.test(arr.join(''))를 사용하여 문자열이 e가 포함되어 있지 않은지 확인합니다. (/e/i 정규표현식은 대소문자를 구분하지 않고 e를 찾습니다.
'javascript' 카테고리의 다른 글
[리액트를 다루는 기술] data and hash arguments required 에러 해결 (0) | 2024.01.26 |
---|---|
[프로그래머스] 1월16일 ~ 1월21일 (0) | 2024.01.16 |
[프로그래머스] 1월2일 ~ (0) | 2024.01.03 |
[프로그래머스] 12월26일 ~ 12월30일 (0) | 2023.12.26 |
[프로그래머스] 게임 맵 최단거리(BFS) (0) | 2023.12.26 |