티스토리 뷰
배열의 유사도
//for ... in 반복문: key 를 뽑을 때 주로 사용 (배열에 사용하기엔 의미가 없음)
//for ... of 반복문: es6에 추가된 새로운 컬렉션 전용 반복 구문, iterable 객체의 value 반복문
function solution(s1, s2) {
let answer = [];
for (i of s1) {
for (j of s2) {
if (i === j) {
answer.push(i);
}
}
}
return answer.length;
}
//내 답은 이중 for문을 사용하였는데 성능적으로 좋은 코드는 아니다.
//그렇다면 가독성이라도 좋아야 하는데 내장 메서드를 활용하지 못한 점이 아쉽다.
// 다른 사람 풀이
// 검색 키워드로 js "교집합"을 구하는 공식 같은 것을 찾아보면 좋을 듯
// filter() : 해당 조건에 부합하는 요소를 새 배열에 리턴한다.
// includes() : 배열이 특정 요소를 포함하고 있는 지 판별한다. 반환값은 boolean
// includes 에 true값인 아이들만 새 배열로해서 반환한다.
// 간결하면서 의미가 명확한 좋은 코드 같다.
{
function solution(s1, s2) {
const intersection = s1.filter((x) => s2.includes(x));
return intersection.length;
}
}
옷가게 할인 받기
//문제 설명
// 머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
// 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
//제한 사항
// 10 ≤ price ≤ 1,000,000 -> 양의 정수
// price는 10원 단위로(1의 자리가 0) 주어집니다. -> 가격은 10원 단위
// 소수점 이하를 버린 정수를 return합니다. -> Math.floor()
// 입출력 예
// price result
// 150,000 142,500
// 580,000 464,000
// 입출력 예 설명
// 입출력 예 #1
// 150,000원에서 5%를 할인한 142,500원을 return 합니다.
// 입출력 예 #2
// 580,000원에서 20%를 할인한 464,000원을 return 합니다
function solution(price) {
if (price >= 500000) {
price *= 0.8;
} else if (price >= 300000) {
price *= 0.9;
} else if (price >= 100000) {
price *= 0.95;
}
return Math.floor(price);
}
//결론: 소수점을 버리는 용도로는 Math.floor보다는 parseInt가 나은 거 같다.
//다른 분 풀이 2차 배열, for of 문법 활용
{
const discounts = [
[500000, 20],
[300000, 10],
[100000, 5],
];
//
const solution = (price) => {
for (const discount of discounts)
if (price >= discount[0])
return Math.floor(price - (price * discount[1]) / 100);
return price;
};
console.log(solution(150000)); //142500
}
중앙값 구하기
// 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다.
//예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
// 제한 사항: array의 길이는 홀수
// 0 < array.length < 100
// -1000 < array의 원소 < 1000
// sort()는 원본을 변형함(새 배열 반환x)
function solution(array) {
return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}
solution([1, 3, 4, 5, 6]);
이전에 많이 쓴 메서드들인데 막상 또 다시 하려니 까먹어서 다시 찾아보는 일이 부지기수.. 자주 문제를 풀어야 겠다.
제한 사항을 제대로 볼 것, 디버깅을 습관화했더니 값이 어디서 잘못들어가는 지 찾는 것은 어렵지 않았다.
다만, 다음에는 내 수준보다 높은 문제를 적은 수라도 도전해봐야겠다.
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스 | JS] lv.1 최대공약수와 최소공배수 (0) | 2023.05.02 |
---|---|
[프로그래머스 | 0단계] 숫자, 문자열 데이터 가공 TIL (0) | 2023.03.02 |
[수학문제] 100! 의 끝에 0의 개수는 몇이나 있을까? (0) | 2022.11.03 |
[백준 | node.js] 백준문제 2588번 (JS 자동 형변환) (0) | 2022.04.25 |
[Node.js] readline 모듈을 사용하여 표준 입력 받기 (0) | 2022.04.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- getServerSideProps
- 항해99추천비추천
- 항해99프론트후기
- 원티드 3월 프론트엔드 챌린지
- 형제 요소 선택자
- grid flex
- 항해99프론트
- D 플래그
- fs모듈 넥스트
- tilde caret
- 타입스크립트 DT
- ~ ^
- 원티드 프리온보딩 FE 챌린지
- reactAPI
- 틸드와 캐럿
- text input pattern
- 타입스크립트 장점
- 프리온보딩 프론트엔드 챌린지 3월
- aspect-ratio
- is()
- && 셸 명령어
- 원티드 FE 프리온보딩 챌린지
- 부트캠프항해
- nvm 설치순서
- Prittier
- nvm경로 오류
- 프리렌더링확인법
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- float 레이아웃
- getStaticPaths
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함