728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/42840?language=javascript 

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

코드


function solution(answers) {
    let answer = [];

    let count = [0,0,0]; //몇개 맞춘지 count를 올릴 배열
    const one = [1,2,3,4,5];
    const two = [2,1,2,3,2,4,2,5];
    const three = [3,3,1,1,2,2,4,4,5,5];

    for (let i=0; i<answers.length; i++) {
        if (answers[i] === one[i % one.length]) count[0]++;
        if (answers[i] === two[i % two.length]) count[1]++;
        if (answers[i] === three[i % three.length]) count[2]++;
    }
    // "i%수포자.length"를 해주는 이유 : one, two, three, answers의 배열의 길이가 모두 다르기 때문에 index에 맞춰 값을 비교해야하기 때문
    const max = Math.max(count[0], count[1], count[2]);
    for (let i=0; i<count.length; i++) {
        if (count[i] === max) { //최대값의 수를 가진학생의 idx에 +1을 하여 answer에 삽입
            answer.push(i+1);
        }
    }

    return answer;
}

 

후기


  • 처음엔 각 수포자들이 맞춘 개수를 count 하기위해 따로 또 배열을 만들고 push를 하였는데 중복 코드가 너무 길어지고 지저분해보였다
  • 이를 해결하기 위해 맨 처음 count 할 배열을 만들어 [0,0,0]으로 초기화하고 각 idx 별로 count++을 해주니 아주 보기 좋았다
  • 처음엔 "i%수포자.length"를 왜 해주는지 너무 이해가 안갔다. 애초에 주어지는 answers의 길이가 5이기 때문에 그냥 "i"로만 비교를 하면 되지 않냐 하는 의문이 들었기 때문이다. 하지만 당연히 틀린 결과가 나왔고, 저걸 해줌으로써 반복되는 answers의 길이와 수포자 배열의 길이를 맞추기 위해서는 idx를 맞춰줘야 하는 작업이 필요하다는 것을 알았고, 그것을 해결하기 위해 "i%수포자.length"가 필요하단 것을 알았다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

코드


function solution(new_id) {
    var answer = '';
    answer = new_id
            .toLowerCase() //1단계
            .replace(/[^\w-_.]/g, '') //2단계
            .replace(/\.+/g, '.') //3단계
            .replace(/^\.|\.$/g, ''); //4단계

    if(answer === '') { //5단계
        answer += 'a';
    }

    answer = answer
            .slice(0, 15) //6단계
            .replace(/\.$/g, '')
            .padEnd(3, answer[answer.length-1]); //7단계

    return answer;
}

 

후기


  • 정규식을 연습하기에도, 제대로 찾아보기에도 좋은 문제였다
  • 정규식을 잘 몰라서 처음엔 for문으로 해결해야지 했다가 조건의 2단계부터 막혀버려서 바로 정규식을 공부하고 왔다
  • https://curryyou.tistory.com/234?category=898979 정규식에 대해서 너무 정리가 잘 돼있는 것 같다 큰 도움을 받았다
  • 조건의 7단계에서 사용된 padEnd() 함수는 문자열 길이를 채우는 함수로서 padStart() 라는 짝꿍 함수가 있다
  • padEnd() 사용법 : "string.padEnd(목표길이, 채울 값)" 의 구조를 가지고 있으며, 문자열 string의 길이가 목표길이가 될 때까지 string뒤에  채울 값으로 채워주는 의미이다 (반대로 padStart()는 목표길이가 될 때까지 string 앞에 채워준다)
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/81301

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

코드


function solution(s) {
    var answer = 0;

    s = s.replace(/zero/g, 0);
    s = s.replace(/one/g, 1);
    s = s.replace(/two/g, 2);
    s = s.replace(/three/g, 3);
    s = s.replace(/four/g, 4);
    s = s.replace(/five/g, 5);
    s = s.replace(/six/g, 6);
    s = s.replace(/seven/g, 7);
    s = s.replace(/eight/g, 8);
    s = s.replace(/nine/g, 9);

    answer = parseInt(s);

    return answer;
}

 

후기


  • 정규식으로 풀이를 해서 간단하게 코드가 나왔다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

 

코드


function solution(board, moves) {
    let answer = 0; //스택에서 연속된 숫자를 삭제할때 count
    let basket = []; //인형을 담을 스택
    let col, row, move, doll;

    for (col=0; col<moves.length; col++) {
        move = moves[col]-1; //idx번호 맞추기 위해 -1

        for (row=0; row<board.length; row++) { //열은 move로 고정돼있으므로 각 행을 보기만 하면 됨
            doll = board[row][move];

            if (doll !== 0) {
                board[row][move] = 0; //값을 0으로 변경

                if (basket.length !== 0 && basket[basket.length-1] === doll) { //바구니가 비어있지 않고 인형이 바구니에 들어있는 마지막 인형과 같다면
                    basket.pop(); //인형 터뜨리고
                    answer += 2; //count 2번 올리기
                }
                else {
                    basket.push(doll);
                }

                break;
            }
        }
    }

    return answer;
}

 

후기


  • 처음에 접근을 잘못해서 4중 for문을 만들어 버렸고 결국 이중 for문으로 풀이를 하였지만 이게 최선일까 하는 생각이 드는 코드였다

+ Recent posts