IT/알고리즘

[프로그래머스] 문자열 계산하기, 인덱스 바꾸

thesse 2023. 6. 28. 00:36
300x250
반응형

* 버클업 6월 4주차

 

 

 

문자열계산

https://school.programmers.co.kr/learn/courses/30/lessons/120902

 

 

class Solution {
    public int solution(String my_string) {
        String[] set = my_string.split(" ");
        int answer = Integer.valueOf(set[0]);
        
        for(int i=1; i<set.length; i+=2){ // 3+5+7-9
            if(set[i].equals("+")){
                answer += Integer.valueOf(set[i+1]);
            } else {
                answer -= Integer.valueOf(set[i+1]);
            }
        }
        
        return answer;
    }
}

Runtime 0.09~0.17ms 소요

스트링으로 들어온 문자들을 공백 기준으로 split해서 Array에 담고

첫 번째 값을 int로 변환해서 answer에 먼저 담은 후

반복문 돌려서 연산자와 숫자끼리 계산해서 answer에 추가

 

 

 

* 다른사람의 어마어마한 한줄풀이

return Arrays.stream(my_string.replaceAll("- ", "-").replaceAll("[+] ", "").trim().split(" ")).mapToInt(Integer::parseInt).sum();

stream 활용
+은 제거해서 양수 형태, -는 공백 제거해서 음수 형태로 만든 후
string->int 변환해서 sum 함수로 집계
하지만 성능은 별로이다 (Runtime 1.38~1.89ms)

 

 

 


 

 

 

인덱스바꾸기

https://school.programmers.co.kr/learn/courses/30/lessons/120895

 

 

1. 생각나는대로 풀어보기

Runtime 0.13~0.20ms 소요 (다소 느림)

class Solution {
    public String solution(String my_string, int num1, int num2) {
        String[] ms = my_string.split("");
        
        String tmp = ms[num1];        
        ms[num1] = ms[num2];
        ms[num2] = tmp;
        
        StringBuilder sb = new StringBuilder();
        for(String c : ms){
            sb.append(c);
        }
                
        return sb.toString();
    }
}

 

 

 

2.index 대신 substring으로 풀어보기

Runtime 0.03~0.06ms로 감소

olution {
    public String solution(String my_string, int num1, int num2) {
        StringBuilder sb = new StringBuilder();
        
        sb.append(my_string.substring(0, num1));
        sb.append(my_string.substring(num2,num2+1));
        sb.append(my_string.substring(num1+1,num2));
        sb.append(my_string.substring(num1,num1+1));
        sb.append(my_string.substring(num2+1,my_string.length()));
        
        return sb.toString();
    }
}

 

 

 

3.다른사람의 풀이 보고 char 이용해서 풀기

Runtime 0.02~0.04ms로 substring 방식보다 아주 약간 더 빠름

1과 유사하지만 tmp 필요없고 for 돌릴 필요도 없음. 코드도 간략함

class Solution {
    public String solution(String my_string, int num1, int num2) {
        char[] ms = my_string.toCharArray();
               
        ms[num1] = my_string.charAt(num2);
        ms[num2] = my_string.charAt(num1);
                
        return String.valueOf(ms);
    }
}
300x250
반응형