<Medium> String to Integer (atoi) (LeetCode : C#)

이도희·2023년 2월 25일
0

알고리즘 문제 풀이

목록 보기
19/185

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

📕 문제 설명

문자열을 32비트 signed 정수로 변환하는 함수 구현

Algorithm

  1. 다음 문자가 '-'인지 '+'인지 확인 (부호 결정)
  2. 문자 끝까지 읽기
  3. digit을 정수로 변경 (ex, "0032" -> 32)
  4. integer이 32 비트 범위 벗어나면 제한 중 가장 가까운 값으로 변경 (ex, -2^31 보다 작으면 -2^31로 변경)
  5. int 반환

space는 무시

  • Input
    문자열
  • Output
    변환된 정수

예제

풀이

public class Solution {
    public int MyAtoi(string s) {
        if (s.Length == 0) return 0;

        string num = "";
        bool isSigned = false;
        int currIndex = 0;
        // 공백만큼 index 옮기기
        for (int i = 0; i < s.Length; i++)
        {
            if (s[i] != ' ') break;
            currIndex ++;
        }

        if (currIndex == s.Length) return 0;
        // 공백 다음 처음 만난 문자가 부호인지 확인
        switch (s[currIndex])
        {
            case '-':
                isSigned = true;
                currIndex ++;
                break;
            case '+':
                currIndex ++;
                break;
        }
		
        for (int i = currIndex; i < s.Length; i ++)
        {
        	// 숫자면 num에 더해줌
            if (int.TryParse(s[i].ToString(), out int value))
            {
                num += value.ToString();
            }
            else
            {	// 다른 문자 만난 케이스 
                if (num == "") return 0;
                break;
            }
        }
		
        Double.TryParse(num, out double answer);
        // 부호 적용
        if (isSigned) { answer *= -1; }
        // 주어진 범위로 제한
        answer = Math.Clamp(answer, -Math.Pow(2, 31), Math.Pow(2, 31) - 1);

        return (int)answer;
        
    }
}

결과

(이 문제는 시간 의미 x. 같은 풀이 기준 30~90까지 나옴. 즉, 미세한 차이)

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글