문제링크
문제 접근
- 스트링 돌면서 '-' 또는 숫자 인식하자
- 이후에 ' '(공백) 나올 때까지 스트링빌더에 넣어서 두 자리수 이상 숫자 get
- Num클래스 만들어서 boolean(음수인지 아닌지), int(숫자값)으로 최소, 최대 값 기록
코드
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder answer = new StringBuilder();
Num bigNum = new Num(true, Integer.MAX_VALUE);
Num smallNum = new Num(false, Integer.MAX_VALUE);
for(int i=0;i<s.length();i++){
char now = s.charAt(i);
if(now == ' '){ // 공백은 패스
continue;
}
else if(now == '-'){ //음수 시작지점
int j = i+1; // '-'이므로 하나 다음부터 시작
StringBuilder temp = new StringBuilder();
while(true){ //두자리수 이상 숫자 판단하기 위한 반복문
if(j >= s.length() || s.charAt(j) == ' '){
i = j; //i변수 위치 갱신
break;
}
temp.append(s.charAt(j));
j++;
}
int num = Integer.parseInt(temp.toString());
if(bigNum.isMinus && num < bigNum.value){ //최댓값 갱신 조건문
bigNum.value = num;
}
if(!smallNum.isMinus){ //최솟값 갱신 조건문
smallNum.isMinus = true;
smallNum.value = num;
}
else if(smallNum.isMinus && num > smallNum.value){
smallNum.value = num;
}
}
else if(now >= 48 && now <=57){ //양수 시작지점
int j = i; //양수이므로 현재부터 시작
StringBuilder temp = new StringBuilder();
while(true){ //두자리수 이상 숫자 위한 반복문
if(j >= s.length() || s.charAt(j) == ' '){
i = j; //i변수 위치 갱신
break;
}
temp.append(s.charAt(j));
j++;
}
int num = Integer.parseInt(temp.toString());
if(bigNum.isMinus){ // 최댓값 갱신 조건문
bigNum.isMinus = false;
bigNum.value = num;
}
else if(bigNum.value < num){
bigNum.value = num;
}
if(!smallNum.isMinus && num < smallNum.value){ //최솟값 갱신 조건문
smallNum.value = num;
}
}
}
if(smallNum.isMinus) answer.append('-');
answer.append(smallNum.value + " ");
if(bigNum.isMinus) answer.append('-');
answer.append(bigNum.value);
return answer.toString();
}
static class Num{
boolean isMinus;
int value;
Num(boolean isMinus, int value){
this.isMinus = isMinus;
this.value = value;
}
}
}
결과

정리
- 문제 풀면서 음수인지 체크때문에 만든 클래스를 안만들고 할 수 있지 않을까 하는 의문이 들었다
- 역시나 문자열을 s.split(" ")해서 문자열 배열에 저장한 후 parseInt하면 끝이었다.....
정신 안차릴래?
- 문자열 다루는 것에 대해 더 연습이 필요하다
- 그래도 입출력 예시에는 없는 두 자리수 경우 생각해서 바로 접근했다
정말 잘 읽었습니다, 고맙습니다!