Algorithm Solving/Java

[programmers] Java Lv. 2 - 최댓값과 최솟값

기만나🐸 2022. 9. 27. 17:36

문제

문자열 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문이 생략되기 때문에 더 간단하게 해결이 가능했다.

문제를 잘못 읽었어도 좀 더 생각해서 풀었으면 처음부터 틀리지 않았을 것 같아 아쉽다.