Written

69. Sqrt(x) / 70. Climbing Stairs / 8. String to Integer (atoi) / 코딩테스트 스터디 문제풀이 모음 (Leetcode) 본문

알고리즘 문제풀이

69. Sqrt(x) / 70. Climbing Stairs / 8. String to Integer (atoi) / 코딩테스트 스터디 문제풀이 모음 (Leetcode)

steeringhead 2023. 2. 28. 17:58

https://leetcode.com/problems/sqrtx/

 

Sqrt(x) - LeetCode

Can you solve this real interview question? Sqrt(x) - Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well. You must not use any built-in exponent function or o

leetcode.com

Example 1:

Input: x = 4
Output: 2
Explanation: The square root of 4 is 2, so we return 2.

Example 2:

Input: x = 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we round it down to the nearest integer, 2 is returned.

 

Constraints:

  • 0 <= x <= 2^31 - 1

루트의 값을 알 수 있는 내장함수를 사용하지 않고 주어지는 x값의 소수부분을 제외한 정수 값을 반환하는 문제입니다.

내장함수를 사용할 수 없기 때문에,, 학생 때 비슷한 문제를 풀던 것 처럼 앞뒤로 정수로 떨어지는 숫자들을 찾아서 답을 찾아내는 아이디어를 사용하면 됩니다 ! ( EX. 루트8 은 루트4와 루트9 즉 2와 3 사이에 들어가기 때문에 2.xxx일테고 그렇기 때문에 2라고 답을 만들어 낼 수 있는 것입니다!) 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
    if (x <= 1){
        return x;
    }
 
    for (let i=1;i<=x;i++){
        if( i*> x){   
            return i-1;
        }
    }
};
cs

https://leetcode.com/problems/climbing-stairs/

 

Climbing Stairs - LeetCode

Can you solve this real interview question? Climbing Stairs - You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?   Example 1: Input: n = 2 Outpu

leetcode.com

Example 1:

Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

 

Constraints:

  • 1 <= n <= 45

다이나믹 프로그래밍 문제입니다. n=4 , n=5일 때 경우의 수를 계산해보면 앞의 두 경우의수를 더한게 그 다음 n값의 경우의 수와 같은 규칙이 있습니다(피보나치 수열). 규칙이 없다면 알고리즘을 구현하기가 상당히 복잡해 보여서, 반드시 규칙이 있을거라고 생각하고 찾아보려고 했는데 피보나치 수열이라고는 생각을 못했습니다. 풀이는 solution에 나와있는 코드를 참고하였습니다 !

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * @param {number} n
 * @return {number}
 */
 //다이나믹 프로그래밍 문제.
var climbStairs = function(n) {
    if (n<=1){
        return 1;
    }
 
    if (n===2){
        return 2;
    }
 
    let first = 1;
    let second = 2;
    let third;
 
    for (let i=3;i<=n;i++){
        third = first + second;
        first = second;
        second = third;
    }
    return third;
};
cs

https://leetcode.com/problems/string-to-integer-atoi/

 

String to Integer (atoi) - LeetCode

Can you solve this real interview question? String to Integer (atoi) - Implement the myAtoi(string s) function, which converts a string to a 32-bit signed integer (similar to C/C++'s atoi function). The algorithm for myAtoi(string s) is as follows: 1. Read

leetcode.com

주어지는 문자열을 조건에 맞게 32비트 범위 안의 정수로 변환하는 문제입니다.

문제가 조금 복잡하고 특이했습니다.. 일단 주어지는 문자열에서 숫자만 추출하는 문제인데, 문자가 먼저나오고 숫자가 뒤에 나오는 경우는 0을 리턴하게끔 하라는 조건이 존재합니다. 예를들면 "4193 with words"는 조건에 따르면 4193이라는 정수로 반환이되고, "words with 4193"이 입력이라면 0을 반환해야 합니다.

 

또한 하나더 신기한 점을 발견했는데 , parseInt함수에 "4193 with words" 을 인자로 넘기면 4193을 반환해주고, 

"words with 4193"을 입력하면 NaN을 반환합니다. 둘다 숫자가 포함된 문자열인데, 위치에 따라 리턴값이 다르다는 걸 배웠습니다. 풀이는 solution에 있는 다른 분의 코드를 참고했습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {
    let parseS = parseInt(s);
 
    const min = -1*2**31;
    const max = 2**31 -1;
 
    if(parseS<min){
        parseS = min;
    }
    
    if(parseS>max){
        parseS = max;
    }
 
    if(isNaN(parseS) === true){
        return 0;
    }
 
    
    return parseS;
};
cs

 

 

Comments