[programmers] Java Lv. 2 - 최댓값과 최솟값
문제
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다.
str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.
제한 조건
- s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
입출력 예
s | return |
"1 2 3 4" | "1 4" |
"-1 -2 -3 -4" | "-4 -1" |
"-1 -1" | "-1 -1" |
풀이
1. split메서드를 사용해서 공백을 기점으로 자른 문자열들을 배열에 저장
2. 배열의 0번째 값을 min값과 max값으로 초기화
3. 배열의 1번째 값부터 마지막 값을 min과 max와 비교하여 최댓값과 최솟값을 저장
class Solution {
public String solution(String s) {
//s에서 공백을 기점으로 잘라서 배열에 저장
String[] numArr = s.split(" ");
//for(int i=0; i<numArr.length; i++){
// System.out.println(numArr[i]);
//}
int min = Integer.parseInt(numArr[0]);
int max = min;
for(int i = 1; i < numArr.length; i++){
int testNum = Integer.parseInt(numArr[i]);
if(min > testNum) min = testNum;
if(max < testNum) max = testNum;
}
return min + " " + max;
}
}
실수
예시만 보고 문제를 잘못 이해해서 실수를 했다.
매개변수 String s에는 둘 이상의 정수가 공백으로 구분되어 있는 것인데, -9 ~ 9까지의 정수에만 해당한 풀이를 해버렸다.
일의 자리 수에만 해당하는 문제라고 생각하고 풀이한 코드는 아래와 같다.
class Solution {
public String solution(String s) {
int min;
int max;
if(s.charAt(0)=='-'){
min = Character.getNumericValue(s.charAt(1)) * -1;
max = min;
}else{
min = Character.getNumericValue(s.charAt(0));
max = min;
}
for(int i=1; i<s.length(); i++){
if(s.charAt(i)==' ' || s.charAt(i)=='-')
continue;
else{
int temp = Character.getNumericValue(s.charAt(i));
if(s.charAt(i-1)=='-')
temp = temp * -1;
if(min > temp) min = temp;
if(max < temp) max = temp;
}
}
return min + " " + max;
}
}
다시 풀고 나서 생각해보니 charAt과 Character.getNumericValue메서드를 쓸 필요 없었다.
split을 사용했다면 음수와 양수를 판별하는 if문이 생략되기 때문에 더 간단하게 해결이 가능했다.
문제를 잘못 읽었어도 좀 더 생각해서 풀었으면 처음부터 틀리지 않았을 것 같아 아쉽다.