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;
}
}
스트링으로 들어온 문자들을 공백 기준으로 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
반응형
'IT > 알고리즘' 카테고리의 다른 글
substring과 유사한 String 생성자 (LeetCode 2390) (0) | 2023.09.12 |
---|---|
set에서 add()의 리턴값을 bool로 사용하기 (LeetCode 219) (1) | 2023.08.29 |
[프로그래머스] 피자 나눠 먹기(3), 중앙값 구하기 (0) | 2023.06.21 |
프로그래머스 Lv.0 최댓값 만들기(2) (0) | 2023.05.24 |
프로그래머스 Lv.1 부족한 금액 계산하기 (0) | 2023.05.24 |