티스토리 뷰

코딩테스트

프로그래머스 1단계 답지1

안양사람 2020. 12. 25. 00:53
728x90
SMALL

완주하지 못한 선수

function solution(participant, completion) {
    participant.sort();
    completion.sort();
    for(let i=0;i<participant.length;i++){
        if(participant[i]!==completion[i]){
            return participant[i];
        }
    }
}

programmers.co.kr/learn/courses/30/lessons/42576

 

모의고사

function solution(answers) {
    let check=[];
    let correct=[];
    check[0]=[1,2,3,4,5];
    check[1]=[2,1,2,3,2,4,2,5];
    check[2]=[3,3,1,1,2,2,4,4,5,5];
    for(let i=0;i<3;i++){
        correct[i]=answers.filter((value,j)=>value===check[i][j%check[i].length]).length;
    }
    const max=Math.max(correct[0],correct[1],correct[2]);
    let answer=[];
    for(let i=0;i<3;i++){
        correct[i]===max && answer.push(i+1);
    }
    return answer;
}

programmers.co.kr/learn/courses/30/lessons/42840

 

체육복

function solution(n, lost, reserve) {
    let arr=new Array(n).fill(1);
    for(let i=0;i<lost.length;i++){
        arr[lost[i]-1]=0;
    }
    for(let i=0;i<reserve.length;i++){
        arr[reserve[i]-1]+=1;
    }
    for(let i=0;i<n;i++){
        if(arr[i-1]===2&&arr[i]===0){
            arr[i-1]=1; arr[i]=1;
        }else if(arr[i]===0&&arr[i+1]===2){
            arr[i]=1;arr[i+1]=1;
        }
    }
    return arr.filter((value)=>value>0).length;
}

programmers.co.kr/learn/courses/30/lessons/42862

 

k번째 수

function solution(array, commands) {
    return commands.map(command=>(
        array.slice(command[0]-1,command[1]).sort((a,b)=>a-b)[command[2]-1]
    ));
}

programmers.co.kr/learn/courses/30/lessons/42748

 

2016년

function solution(a, b) {
    const arr = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
    return arr[new Date(2016,a-1,b).getDay()];
}

programmers.co.kr/learn/courses/30/lessons/12901

 

가운데 글자 가져오기

function solution(s) {
    return s.length%2===0 ? s.slice(s.length/2-1,s.length/2+1) : s[parseInt(s.length/2)];
    return s.substr(Math.ceil(s.length/2)-1, s.length%2===0 ? 2 : 1);  //이렇게 해두 돼
}

programmers.co.kr/learn/courses/30/lessons/12903

 

같은 숫자는 싫어

function solution(arr){
    return arr.filter((value,i)=>value!==arr[i+1]);
}

programmers.co.kr/learn/courses/30/lessons/12906

 

나누어 떨어지는 숫자 배열

function solution(arr, divisor) {
    const answer=arr.filter((value)=>value%divisor===0).sort((a,b)=>a-b);
    return answer.length!==0 ? answer : [-1];
}

programmers.co.kr/learn/courses/30/lessons/12910

 

두 정수 사이의 합

function solution(a, b) {
    let answer=0;
    for(let i=Math.min(a,b);i<=Math.max(a,b);i++){
        answer+=i;
    }
    return answer;
}

이런것도 가능하네.. 제로초님

function solution(a, b) {
  a > b && ([a, b] = [b, a]);
  return Array(b - a + 1).fill().map((v, i) => v + i).reduce((a, c) => a + c);
}

 

programmers.co.kr/learn/courses/30/lessons/12912

 

문자열 내 마음대로 정렬하기

function solution(strings, n) {
    return strings.sort((a,b)=>{
        if(a[n]===b[n]){
            return (a > b) - (a < b);
        }
        else{
            return (a[n]>b[n])-(a[n]<b[n]);
        }
    })
}

사전식 정렬 localeCompare

function solution(strings, n) {
    return strings.sort((a,b)=>
        a[n]===b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n])
    )
}

programmers.co.kr/learn/courses/30/lessons/12915

 

문자열 내 p와 y의 개수

function solution(s){
    const arr=s.toUpperCase();
    let num=[0,0];
    for(let i=0;i<arr.length;i++){
        if(arr[i]==='P'){
           num[0]++; 
        } else if(arr[i]==='Y'){
            num[1]++;
        }
    }
    return num[0]===num[1];
}

includes 사용  -- 제로초님

function solution(s) {
  const p = s.split('').filter(v => ['p', 'P'].includes(v));
  const y = s.split('').filter(v => ['y', 'Y'].includes(v));
  return p.length === y.length;
}

정규식 -- 타임에러

function solution(s){
    return s.match(/p/ig).length===s.match(/y/ig).length;   
}

근데 이건 돼 -- 위에가 p, y가 존재하지 않을 때 에러는 이해가 되는데 왜 타임에러??

function solution(s){
  return s.replace(/p/gi, '').length == s.replace(/y/gi, '').length;
}

programmers.co.kr/learn/courses/30/lessons/12916

 

문자열 내림차순으로 배치하기

function solution(s) {
    return s.split('').sort().reverse().join('');
}

programmers.co.kr/learn/courses/30/lessons/12917

 

문자열 다루기 기본 -- includes... 메모

function solution(s) {
    return [4,6].includes(s.length) && parseInt(s)==s;
}

programmers.co.kr/learn/courses/30/lessons/12918

 

서울에서 김서방 찾기

function solution(seoul) {
    return "김서방은 "+seoul.indexOf('Kim')+"에 있다";
}

programmers.co.kr/learn/courses/30/lessons/12919

 

소수찾기

기본 코드 -- 실패

function solution(n) {
    let count=0;
    for(let i=2;i<=n;i++){
        if(isPrime(i)){
            count++;
        }
    }
    return count;
}

function isPrime(n){
    if(n<2) return false;
    for(let i=2;i<=n/2;i++){
        if(n%i===0){
            return false;
        }
    }
    return true;
}

향상된 코드 -- 배열에 모두 1을 집어넣은 후 소수인 index의 배열에 0을 대입

function solution(n) {
    let count=0;
    let arr=new Array(n+1).fill(1);
    for(let i=2;i<=n;i++){
        if(arr[i]!==0){
            for(let j=i*2;j<=n;j+=i){
                arr[j]=0;
            }
        }
    }
    for(let i=2;i<=n;i++){
        if(arr[i]!==0){
            count++;
        }
    }
    return count;
}

 

programmers.co.kr/learn/courses/30/lessons/12921

 

수박수박수박수박수박수?  

function solution(n) {
    let answer="";
    for(let i=0;i<n;i++){
        i%2===0 ? answer+="수" : answer+="박";
    }
    return answer;
}

repeat 사용

function solution(n) {
  return '수박'.repeat(n).substr(0, n);
}

programmers.co.kr/learn/courses/30/lessons/12922

 

문자열을 정수로 바꾸기

function solution(s) {
    return +s;
}

programmers.co.kr/learn/courses/30/lessons/12925

 

시저 암호  -- 아스키 코드 사용. 변환 코드나 아스키 코드는 구글링. 아스키 코드 표를 보고 조금만 생각하면 답나옴

function solution(s, n) {
    let answer="";
    for(let i=0;i<s.length;i++){
        if(s[i]===" "){
            answer+=" ";
        }
        else{
            answer+=String.fromCharCode((s.charCodeAt(i)>=97)
                                        ? (s.charCodeAt(i)+n-97)%26+97 : (s.charCodeAt(i)+n-65)%26+65
            );
        }
    }
    return answer;
}

programmers.co.kr/learn/courses/30/lessons/12926

 

약수의 합

function solution(n) {
    let answer=0;
    for(let i=1;i<=n;i++){
        if(n%i===0){
            answer+=i;
        }
    }
    return answer;
}

리듀스 사용  -- 리듀스 알면서 안쓰는데 의식하고 쓰자

function solution(n) {
    return Array(n).fill().map((x,index)=>index+1).reduce((a,b)=>n%b ? a : a+b);
}

programmers.co.kr/learn/courses/30/lessons/12928

 

이상한 문자 만들기  -- split, map을 활용했다. 아직 이해가 되지 않는다면 for문 쓰면 됩니다

function solution(s) {
    return s.split(' ').map(word=>word.split('').map((letter,i)=>
        i%2===0 ? letter.toUpperCase():letter.toLowerCase()
    ).join('')).join(' ');
}

programmers.co.kr/learn/courses/30/lessons/12930

 

자릿수 더하기

function solution(n){
    let answer=0;
    n=n+"";
    for(let i=0;i<n.length;i++){
        answer+=+n[i];
    }
    return answer;
}

programmers.co.kr/learn/courses/30/lessons/12931

 

자연수 뒤집어 배열로 바꾸기

function solution(n) {
    return String(n).split('').reverse().map(i=>+i);
}

programmers.co.kr/learn/courses/30/lessons/12932

 

정수 내림차순으로 배치하기

function solution(n) {
    return String(n).split('').sort((a,b)=>b-a).join('')*1;
}

programmers.co.kr/learn/courses/30/lessons/12933

 

 

정수 제곱근 판별

function solution(n) {
    const root=Math.sqrt(n);
    return Number.isInteger(root) ? (root+1)**2 : -1 
}

programmers.co.kr/learn/courses/30/lessons/12934

 

제일 작은 수 제거하기

function solution(arr) {
    const min=Math.min(...arr);
    const filArr=arr.filter(i=>i!==min);
    return filArr.length ? filArr : [-1];
}

programmers.co.kr/learn/courses/30/lessons/12935

 

짝수와 홀수

function solution(num) {
    return num%2===0 ? "Even" : "Odd";
}

programmers.co.kr/learn/courses/30/lessons/12937

 

최대공약수와 최소공배수  -- 유클리드 호제법

function cGCD(a, b){
    console.log(a,b);
	return b ? cGCD(b, a%b) : a;
}

function solution(n, m) {
    const gcd=cGCD(n,m);
    return [gcd,n*m/gcd];
}

programmers.co.kr/learn/courses/30/lessons/12940

 

콜라즈 추측

function solution(num) {
    let count=0;
    while(num!==1){
        num%2===0 ? num/=2 : num=num*3+1;
        count++;
        if(count===500){
            return -1;
        }
    }
    return count;
}

programmers.co.kr/learn/courses/30/lessons/12943

 

평균 구하기

function solution(arr) {
    return arr.reduce((acc,cur) => acc+cur)/arr.length;
}

programmers.co.kr/learn/courses/30/lessons/12944

 

하샤드 수

function solution(x) {
    return !(x%String(x).split('').reduce((acc,cur) => acc + cur*1, 0));
}

programmers.co.kr/learn/courses/30/lessons/12947

 

핸드폰 번호 가리기

function solution(phone_number) {
    return '*'.repeat(phone_number.length-4)+phone_number.slice(-4);
}

programmers.co.kr/learn/courses/30/lessons/12948

 

행렬의 덧셈

function solution(arr1, arr2) {
    return arr1.map((ar1,i) => ar1.map((a1,j) => a1+arr2[i][j]));
}

programmers.co.kr/learn/courses/30/lessons/12950

 

x만큼 간격이 있는 n개의 숫자

function solution(x, n) {
    return Array(n).fill(x).map((val,idx) => val*(idx+1));
}

programmers.co.kr/learn/courses/30/lessons/12954

 

직사각형 별찍기

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    console.log(solution(a,b));
    function solution(a,b){
        return Array(b).fill().map(i => '*'.repeat(a)).join('\n');
    }
});

programmers.co.kr/learn/courses/30/lessons/12969

 

 

 

모든 문제는 제가 풀어서 정확하지 않거나 효율적이지 않은 코드가 있을 수 있습니다.

다른 사람 코드를 참조한 경우에는 설명에 적어놓았습니다.

728x90
LIST
댓글
공지사항