반응형

콜라츠 추측

 

문제 설명
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다. 
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

제한 사항
입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.
입출력 예

n result
6 8
16 4
626331 -1


입출력 예 설명
입출력 예 #1
문제의 설명과 같습니다.

입출력 예 #2
16 → 8 → 4 → 2 → 1 이 되어 총 4번 만에 1이 됩니다.

입출력 예 #3
626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.

 

function solution(num) {
    var answer = 0;
    
    if (num === 1) return answer;
    
    for (let i = 1; i <= 500; i++) {
        if (num % 2 === 0) num = num / 2;
        else if (num % 2 === 1) num = num * 3 + 1;
        
        if (num === 1) return answer = i;
    }
    
    return answer = -1;
}

console.log(solution(6)); // 8
console.log(solution(16)); // 4
console.log(solution(626331)); // -1

직관적이라고 믿어봅니다.

 

다른 사람의 풀이

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function collatz(num) {
    var answer = 0;
    while(num !=1 && answer !=500){
        num%2==0 ? num = num/2 : num = num*3 +1;
    answer++;
  }
    return num == 1 ? answer : -1;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( collatz(6) );

가장 깔끔하게 풀었다고 칭찬받던 코드 내용입니다. 

항상 문제풀기 시작할 때 for반복문과 if문부터 만지는 제가 부끄.....( 럽지 않습니다..! )

그래도 이렇게 여러가지 적용해서 푸시는 분들 보면 신기.. 부럽.. 습니다

 

또 다른 사람의 풀이

const solution = (num) => collatzGuessCount(num, 0);

const collatzGuessCount = (num, acc) => 
  (num === 1) ? ((acc > 500) ? -1 : acc) : collatzGuessCount(processCollatz(num), acc + 1);

const processCollatz = (num) => (num % 2 === 0) ? (num / 2) : (num * 3 + 1);

WOW..

 

반응형
반응형

짝수와 홀수

 

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

제한 조건
num은 int 범위의 정수입니다.
0은 짝수입니다.
입출력 예

num  return
3 "Odd"
4 "Even"

 

function solution(num) {
    var answer = '';
    
    if (num % 2 === 0) answer = "Even";
    else answer = "Odd";
    
    return answer;
}

console.log(solution(3)); // Odd
console.log(solution(4)); // Even

 

다른 사람의 풀이

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function evenOrOdd(num) {
  return num % 2 ? "Odd" : "Even"
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log("결과 : " + evenOrOdd(2));
console.log("결과 : " + evenOrOdd(3));

맨날 3항 연산자 사용해봐야지! 하고 다음날되면 리셋.....

반응형
반응형

정수 제곱근 판별

 

문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예

n return
121 144
3 -1


입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

function solution(n) {
    var answer = 0;
    let x = Math.sqrt(n)
    
    if (Number.isInteger(x)) {
        answer = (x + 1) * (x + 1)
    } else {
        answer = -1
    }
        
    return answer;
}

console.log(solution(121)); // 144
console.log(solution(3)); // -1

먼저 Math.sqrt() 함수로 제곱근을 반환해준다음 Number.isInteger() 메서드로 정수인지 판별해줍니다.

만약 정수일 경우에는 +1을 해준다음 제곱을 하고 리턴해줍니다.

그리고 정수가 아닐경우에는 -1을 리턴해줍니다.

 

다른 사람의 풀이

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function nextSqaure(n){
    var result = 0;
    var n = Math.sqrt(n);
    result = Number.isInteger(n) ? Math.pow(n+1, 2) : 'no';
    return result;
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log("결과 : " + nextSqaure(121));
console.log("결과 : " + nextSqaure(3));

개편되고 난 후, no => -1로 변경되었나봅니다 !

Math.pow() 함수는 제곱한 값을 변환해 준다고 하네요 ㄷㄷ..( 어쩐지 다들 Math.pow()를 사용한 내용들이 많았었.. )

함상 연산자로 깔끔하게 뽑아줬네요!

반응형
반응형

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

 

문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
입출력 예

n return
118372 873211

 

function solution(n) {
    var answer = 0;
    
    let arr = Number(String(n).split("").sort().reverse().join(""));
    
    answer = arr

    return answer;
}

console.log(solution(118372)); // 873211

문자열로 바꾸고, 배열로 만들고, 정렬하고, 뒤집고, 합치고 다시 넘버로 바꾸면 완성입니다.

 

다른 사람의 풀이

function solution(n) {
    // 문자풀이
    return parseInt((n+"").split("").sort().reverse().join(""));
}

parseInt는 잘 사용안하는데 사용하시는 분들이 많은것 같습니다.. !

반응형
반응형

마우스 우클릭 이벤트인 onContextMenu에 대한 내용입니다.

마우스 좌클릭 이벤트인 onClick에 대해서는 대부분 알 것으로 생각됩니다.

그림사이트, 저작권 사이트 등이 조금이라도 컨텐츠들을 지키기위해 사용할 수 있는 우클릭 방지입니다.

 

javascript

onContextMenu(e => {
    e.preventDefault();
})

// ----- //

document.oncontextmenu = function() { return false; };

 

html

<div oncontextmenu="return false">
    내용
</div>

// next.js에서 사용했을 때----- //
<div onContextMenu={(e) => e.preventDefault()}>
    내용
</div>

기본 html, 프레임워크 등 어디서 사용하느냐에 따라서 조금씩 생김새가 다를 수 있습니다.

 

그 외 여러가지 내용

  • onContextMenu: 우클릭 시
  • onSelect: 일부 텍스트 선택 시
  • onDragStart: 이미지 드래그 시
  • onKeyDown: 키 입력 시
  • onClick: 좌클릭 시

등등 여러가지 내용이 있습니다 !

반응형
반응형

자연수 뒤집어 배열로 만들기

 

문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건
n은 10,000,000,000이하인 자연수입니다.
입출력 예

n return
12345 [5,4,3,2,1]

 

function solution(n) {
    var answer = [];
    
    let arr = String(n).split("").reverse().map(Number);
    
    answer = arr
    return answer;
}

console.log(solution(12345)); // [5,4,3,2,1]

map() 메서드를 사용할때 Number를 넣어주면 형변환 시켜준다는 내용을 어딘가에서 봤던 기억을 떠올려서 사용해 봤는데 잘 적용되었습니다 !

 

다른 사람의 풀이

function solution(n) {
    // 문자풀이
    // return (n+"").split("").reverse().map(v => parseInt(v));

    // 숫자풀이
    var arr = [];

    do {
        arr.push(n%10);
        n = Math.floor(n/10);
    } while (n>0);

    return arr;
}

do while문은 while문처럼 조건식이 true일 경우 계속해서 반복하는데 do while문은 do 부분을 무조건 한번 실행하고 조건을 검사하고 반복결정을 해줍니다.

반응형
반응형

자릿수 더하기

 

문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항
N의 범위 : 100,000,000 이하의 자연수
입출력 예

N answer
123 6
987 24


입출력 예 설명
입출력 예 #1
문제의 예시와 같습니다.

입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

 

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

console.log(solution(123)); // 6
console.log(solution(987)); // 24

먼저 배열로 만들어주기위해 n을 String으로 감싸서 문자열로 바꿔준다음 split()메서드로 배열로 만들어 주었습니다.

이 후, for반복문을 통해 배열만큼 Number로 다시 형변환을 한 arr를 더해주었습니다.

 

다른 사람의 풀이

function solution(n){
    // 쉬운방법
    return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}

정말 여러가지 방법이 있는것 같습니다..ㄷㄷ

 

또 다른 사람의 풀이

function solution(n)
{
    var answer = 0;

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    String(n).split('').map(data => answer += parseInt(data));

    return answer;
}

다른방법으로 풀었다면 이 방법이지 않을까 합니다 !

반응형
반응형

이상한 문자 만들기

 

문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예

s return
"try hello world" "TrY HeLlO WoRlD"


입출력 예 설명
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

 

function solution(s) {
    var answer = '';

    let arr = s.split(" ");
    let newArr = [];

    for (let i = 0; i < arr.length; i++) {
        arr[i].split("").map((item, index) => {
            if (index % 2 === 0) newArr.push(item.toUpperCase())
            else if (index % 2 === 1) newArr.push(item.toLowerCase())
        })

        if (i !== arr.length - 1) newArr.push(" ");

    }

    answer = newArr.join("");
    return answer;
}

console.log(solution("try hello world")); // TrY HeLlO WoRlD

먼저 공백기준으로 홀/짝수 인덱스를 판단해야 한다기에, split() 메서드를 활용해 공백기준으로 배열을 나눠주었습니다.

이후 for반복문을 사용해 arr.length만큼 반복문을 돌려주고, 내부에서 map() 메서드를 사용해서 나머지가 0일 때는 대문자로 1일 때는 소문자로 새로운 배열에 추가시켜 주었습니다. 그리고 map() 메서드가 끝날 때마다 공백배열을 하나씩 추가해 주고 마지막 for반복문에 돌아갈 때는 공백이 들어가지 않도록 해주었습니다.

 

다른 사람의 풀이

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function toWeirdCase(s){
  //함수를 완성해주세요
  return s.toUpperCase().replace(/(\w)(\w)/g, function(a){return a[0].toUpperCase()+a[1].toLowerCase();})

}

저도 처음에 정규식으로 풀어볼까 했지만 복잡해지지 않을까 고민을 하다 for와 map을 활용했는데, 이렇게 깔끔하게 푸는 분들이 계셨습니다..

그런데 또 다른 분들의 의견을 보면 짧지만 메서드가 많이 들어가서 느리다. function부분 때문에 느리다는 평들이 있었습니다.

function부분을 return전에 정의해주고 정의한 함수를 넣어주면 훨씬 빠르다는 내용들도 함께 있었습니다.

:: 정말 코딩의 세계는 넓습니다! 다들 너무너무 잘하시는듯하네요...ㅠ

반응형
반응형

약수의 합

 

문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한 사항
n은 0 이상 3000이하인 정수입니다.
입출력 예

n return
12 28
5 6


입출력 예 설명
입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

 

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

console.log(solution(12)); // 28
console.log(solution(5)); // 6

 

다른사람의 풀이

function solution(n, a=0, b=0) {
    return n<=a/2?b:solution(n,a+1,b+=n%a?0:a);
}

기발하지만 루프한번 돌리는 것보다 시간이 10배이상 걸리는 테스트 케이스라고 하네요.

그래도 대단합니다.

보는데도 잘 모르겠는게 함정입니다.ㅠ

반응형
반응형

문자열을 정수로 바꾸기

 

문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건
s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.
입출력 예
예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

function solution(s) {
    var answer = 0;
    
    answer = Number(s);
    return answer;
}

console.log(solution("1234")); // 1234
console.log(solution("-1234")); // -1234

!?!?!!??!!?!?!

적으면서 뭐가 더있나를 생각했지만 바로성공 해버렸습니다 ㅎㅎ..

 

다른사람의 풀이

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function strToInt(str){
  return str/1
  }


// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(strToInt("-1234"));
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function strToInt(str){
  return +str;
}


// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(strToInt("-1234"));

아래 코드는 딱 봤을떄 알겠는데 위 코드도 되는줄은 몰랐습니다 ㅎㅎ..

현재는 문제 개편이 되었는데 잘 작동하는지는 모르겠습니다.

반응형

+ Recent posts