본문 바로가기
관리자

Computer Science/Algorithm

[Leetcode] 8. String to Integer (atoi)

728x90
반응형

비추천이 너무 많아서 살펴보니 쓸데없는 복잡한 케이스를 만들어서 if문을 너무 많이 강제한다는 의견들이 많다. 테스트 자체에 대한 생각 외에 더 이상 탐색하는건 시간 낭비인 문제인 것 같다.

 

 

간단해보이는 문제라도 많은 케이스가 존재한다. 처음부터 차분히 풀어야한다.

 

여러 번 돌려보면서 케이스 스터디를 하는게 낫다.

문제를 푸는 입장이라면 내가 케이스들을 다 생각할 필요가 없다. 영어 해석도 일단 대충하고 실행을 여러 번하는게 낫다.

 

 

---------------------------------아래 내용은 안 봐도 됨

1. 문제

Implement the myAtoi(string s) function, which converts a string to a 32-bit signed integer (similar to C/C++'s atoi function).

 

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:

Read in and ignore any leading whitespace.
Check if the next character (if not already at the end of the string) is '-' or '+'. Read this character in if it is either. This determines if the final result is negative or positive respectively. Assume the result is positive if neither is present.
Read in next the characters until the next non-digit character or the end of the input is reached. The rest of the string is ignored.
Convert these digits into an integer (i.e. "123" -> 123, "0032" -> 32). If no digits were read, then the integer is 0. Change the sign as necessary (from step 2).
If the integer is out of the 32-bit signed integer range [-231, 231 - 1], then clamp the integer so that it remains in the range. Specifically, integers less than -231 should be clamped to -231, and integers greater than 231 - 1 should be clamped to 231 - 1.
Return the integer as the final result.
Note:

Only the space character ' ' is considered a whitespace character.
Do not ignore any characters other than the leading whitespace or the rest of the string after the digits.

 


2. 배운점

 

간단해보이는 문제라도 많은 케이스가 존재한다. 처음부터 차분히 풀어야한다.

 

여러 번 돌려보면서 케이스 스터디를 하는게 낫다.

문제를 푸는 입장이라면 내가 케이스들을 다 생각할 필요가 없다. 영어 해석도 일단 대충하고 실행을 여러 번하는게 낫다.

 


3. 풀이

 

작성중. if문을 더 간결하게 바꿔야할 것 같다. 생각보다 많은 케이스가 존재한다.

class Solution:
    def myAtoi(self, s: str) -> int:
        # whitespace
        s = s.strip(' ')
        # 크기
        is_minus = False
        result = ''
        for c in s:
            if not result.isdigit() and c != '-' and c != '+':
                if not c.isdigit():
                    return 0
                elif c == 0:
                    continue
                else:
                    result = result + c
            elif not result.isdigit() and c == '-':
                is_minus = True
            elif not result.isdigit() and c == '+':
                result = result + c
            elif not result.isdigit() and (result == '+' or result == '-') and not c.isdigit():
                return 0
            else:
                if not c.isdigit():
                    break
                else:
                    result = result + c

        if not result.isdigit() and len(result) > 0 and result[0] != '+':
            return 0
        elif result[0] == '+' and result[1:].isdigit():
            return int(result[1:])

        if is_minus:
            result = int(result) * -1
        result = int(result)

        if result > 2**31 - 1:
            return 2**31
        if result < -2**31:
            return -2**31
        return result

 

참조

 

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

728x90
반응형