코딩테스트/자바스크립트

[1213] 코딩테스트 - programmers

문앵 2021. 12. 13. 23:31

 

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

 

 

반응형