본문 바로가기

프로그래머스

[코딩테스트] 231213_5명씩, n 번째 원소까지, 제곱 수 판별하기

728x90

 

 

 


5명씩

function solution(names) {
    var answer = [];
    
    const chunk = 5;
    const TwoArr = [];
    
    for(let i = 0; i < names.length; i += chunk){
        const arr = names.slice(i, i + chunk);
        TwoArr.push(arr)
    }
    for(let i = 0; i < TwoArr.length; i++){
        answer.push(TwoArr[i][0])
    }
    return answer;
}

풀이 시간: 29분 28초

0레벨인데... 가벼운 마음으로 들어왔는데 알고리즘을 이해하는데 시간이 오래걸렸다... 처음엔 알고리즘 이해를 제대로 하지 못해서 입출력 예시 답안만 보고 아래와 같이 작성했었는데

for(let i=0; i < names.length-5;i++){
	if(answer.length < 2){
	    answer.push(names[i]);
	    answer.push(names[i+5]);    
	}
}

이게 코드 실행에는 통과지만 제출을 했을 때 전부 오답이 뜨는 것을 보고 뭔가 큰 문제가 있다는 사실을 깨달았다. 5명씩으로 묶는 배열은 원래 배열의 길이에 따라 3개도, 4개도 될 수 있다는 사실을 망각하고 생각없이 풀어서 생긴 문제였다. 이 문제를 이중배열로 만들어 풀어보자 싶었고 for문과 slice 메서드를 활용해 문제를 풀 수 있었다.

 

 

 


n 번째 원소까지

function solution(num_list, n) {
    return num_list.slice(0,n);
}

풀이 시간: 1분 08초

 

 

 


제곱 수 판별하기

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

풀이 시간: 8분 55초

제곱근을 어떻게 구해야하나 고민을 많이 했다.  약수를 구하고 그 약수를 제곱할때 해당 값이 나오면 1을 반환해야하나? 고민을 하다가 왠지 지난번에 제곱근 메서드를 봤었던 기억이 있어 다시 찾아봤다. 제곱근 메서드와 isInteger 메서드로 반환값이 정수인 값이 제곱 수 이므로 두 메서드를 이용하여 처리했다. 기억하자!! Math.sqrt(), Number.isInteger()

 

728x90