1. 로또의 최고 순위와 최저 순위
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
🔎 문제 풀이
- 최고 순위 : 일치하는 숫자의 갯수 + 0의 갯수 ( 0인 부분이 모두 일치하는 숫자라고 가정 )
- 최저 순위 : 일치하는 숫자의 갯수 ( 0인 부분이 모두 일치하지 않는다고 가정 )
🔑 코드 작성
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1]; // 1개 일치 or 0개 일치 두경우 모두 6등이므로 6 두개
let minCount = lottos.filter(v => win_nums.includes(v)).length;
let zeroCount = lottos.filter(v => !v).length; // !0 은 true 이므로
const maxCount = minCount + zeroCount;
return [rank[maxCount], rank[minCount]];
}
🔧 코드 분석
includes(), filter()
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1]; // 1개 일치 or 0개 일치 두경우 모두 6등이므로 6 두개
let minCount = lottos.filter(v => win_nums.includes(v)).length;
// win_nums에 있는 얘들이 있는지보고, 그 겹치는 애들을 lottos에서 뽑아서 새로운 배열로 만들어라
let zeroCount = lottos.filter(v => v===0).length;
// 이렇게 써도 0의 갯수를 구할 수 있다!
const maxCount = minCount + zeroCount; // 여기서 minCount 라는 것은 결국 일치하는 숫자의 갯수를 말함
return [rank[maxCount], rank[minCount]];
}
Array.prototype.includes()
- includes() 메서드는 배열이 특정 요소를 포함하고 있는지 판별합니다.
const array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
const pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false
Array.prototype.filter()
- filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
2. 신규 아이디 추천
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
🔎 문제 풀이
정규표현식을 이용해서 문자열을 조작하기
🔑 코드 작성
function solution(new_id) {
const answer = new_id
.toLowerCase()
.replace(/[^\w-.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\.|\.$/g, '')
.replace(/^$/, 'a')
.slice(0, 15).replace(/\.$/, '');
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
🔧 코드 분석
slice(), replace(), charAt(), 정규 표현식
toLowerCase() //소문자로 바꿔라
.replace(/[^\w-.]/g, '')
// .replace(정규식,'대체문자열') ➡ 정규식에 매칭되는 얘들을 대체문자열로 바꿔라
// [^] ➡ 괄호안의 문자를 제외한 나머지
// \w ➡ 영어, 숫자,언더바(_)
// 옵션 g는 / / 다음에 붙여줌. 모두 찾아서 반환!이라는 뜻. 안붙여주면 처음 하나만 반환
.replace(/\.{2,}/g, '.')
// \. ➡ 특수문자 .을 이스케이프 시켜준것 그렇지 많으면 "모두"를 뜻하는 .이 되어버림
// {2,} ➡ 2개 이상이라는 뜻! {n,} n개 이상
.replace(/^\.|\.$/g, '')
// ^문자열➡ 문자열로 시작하는 것
// | ➡ OR (또는)
// .$ ➡ .으로 끝남. 문자열$ 해주면, 특정 문자열로 끝나는 것을 반환
.replace(/^$/, 'a')
// ^$ ➡ 비어있다는 뜻. 원래 ^문자열 이렇게 써주면 특정 문자열로 시작되는 항목을 말하는데,
// ^$ 해주면 시작하고 끝 사이에 아무도 없는거니까 비어있는거..
.slice(0, 15).replace(/\.$/, '');
// .slice(0,15) ➡ 0번째(begin index)부터 15번째(end index) 문자열까지만 잘라라
// (이때 15번째는 포함되지 않음. 즉 0~14번째 배열까지만 반환해줌)
// .으로 끝나면 빈칸으로 바꿔라 즉, 맨끝에 .이 오면 없애라
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
// 만약에 3글자 이상이면 변환된 answer를 반환해주고,
// 그게 아니면 answer 에다가 거기 써진 문자열을 3글자가 될때까지 반복해줘라
}
문자열.charAt(index) 해주면 index번째 문자열이 반환됨.
* index
- 첫글자를 0번째라고 침
- 0과 문자열의 길이 - 1 사이의 정수값.
- 인자를 생략하면 기본값으로 0를 설정되고 첫 문자를 반환한다.
💘 정규표현식 정리 💘
https://muna76.tistory.com/176
[1213] 정규 표현식
📚 정규표현식 - 정규 표현식이란? 특정 패턴의 문자열을 찾아주는 표현방식! 내가 찾고자 하는 패턴에 매칭되는 문자열을 찾아준다 정규 표현식과 매서드를 적절히 이용해 문자열을 원하는
muna76.tistory.com
'코딩테스트 > 자바스크립트' 카테고리의 다른 글
[코딩 기초 트레이닝] 콜라츠 수열 만들기 (0) | 2025.01.23 |
---|---|
[코딩 기초테스트] 배열 만들기 2 (0) | 2025.01.22 |
[코딩 기초 트레이닝]수열과 구간 쿼리4 (0) | 2025.01.21 |
[코딩 기초 트레이닝] 마지막 두 원소(feat.구조분해할당) (2) | 2024.06.21 |
[프로그래머스-javascript/level1] 김서방 찾기 (0) | 2021.05.26 |