본문 바로가기
프로그래머스 코딩테스트 연습

[프로그래머스 코테 C#] Lv0. 문자열 계산하기

by 노재두내 2024. 3. 4.

answer이 103이 출력됨 아마 문자열을 숫자로 바꿔서 출력되는 듯

아스키 코드표에서 문자 3과 4를 10진수로 표현하면 각각 51 52이다. 그래서 103이 출력

그래서 a,b를 찍어보니 진짜 51 52임

 

 

구글링으로 문자열을 숫자로 바꾸는거 찾아봄 

Convert.ToInt32(input);

int a=Convert.ToInt32(my_string[0]);

int a = int.Parse(my_string[0].ToString());

int로 변환 하니 3으로 제대로 출력

-는 생각하지 않고 +만 생각했을 때 +는 통과

이제 부호 구분해보자

 var charArray = my_string.ToCharArray();
        var c=charArray[2];
        if(c=="+"){
            answer=a+b;
        }
        else{
            answer=a-b;
        }

당연히 안됨

 

문자열 비교 Equals 씀

+랑 Equal이 안나옴 왜지?

다른 사람 풀이 찾아보니까 Split 를 함

public class Solution {
    public int solution(string my_string) {
        int answer = 0;
        string[] str = my_string.Split(" ");
        int a = int.Parse(my_string[0].ToString());
        int b=int.Parse(my_string[4].ToString());
        if(str[1].Equals("+")){
            answer=a+b;
        }
        else{
            answer=a-b;
        }
        
        return answer;
    }
}

그렇게 하니까 통과됨

 

근데 채점하니까

틀림..

테스트 케이스 추가 했더니 런타임에러

아 .. 생각해보니 내가 배열의 [0] 이런거 해서 

두자리 수가 되면 배열에서의 순서가 달라짐

이렇게 하면 안되겠다.

 

for문을 돌아서 부호를 찾자

그리고 찾으면 배열의 첫번째 값이랑 부호 바로 다음값을 더하면 되겠다.

using System;

public class Solution {
    public int solution(string my_string) {
        int answer = 0;
        string[] str = my_string.Split(" ");
        
        for(int i=0;i<str.Length;i++)
        {
            if(str[i].Equals("+")){
                answer =int.Parse(str[0])+int.Parse(str[i + 1]);
            }
            else if(str[i].Equals("-"))
            {
                answer =int.Parse(str[0])-int.Parse(str[i + 1]);
            }
        } 
        return answer;
    }
}

이번에도 테스트 케이스 통과했는데 채점하니까 틀림 ; 우이씨

 

다시 다른 사람 풀이 찾아보기..

아예 처음에 answer에다가 문자열[0] 값을 넣어주고 for문 안에서 더함

using System;

public class Solution {
    public int solution(string my_string) {
        string[] str = my_string.Split(" ");
        int answer = int.Parse(str[0]);
        
        for(int i=0;i<str.Length;i++)
        {
            if(str[i].Equals("+")){
                answer+=int.Parse(str[i + 1]);
            }
            else if(str[i].Equals("-"))
            {
                answer -=int.Parse(str[i + 1]);
            }
        } 
        return answer;
    }
}

answer =int.Parse(str[0])+int.Parse(str[i + 1]);

이거를 이렇게 바꾸니까 정답임 왜지? 이해가 안된다

int answer = int.Parse(str[0]);

answer+=int.Parse(str[i + 1]);