본문 바로가기

컴퓨터 프로그래밍/알고리즘

[프로그래머스] Lv0. 최대값과 최소값 구하기

■ 문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

■ 제한 조건
s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
class Solution {
    public String solution(String s) {
        String answer = "";
        
        String[] numbers = s.split(" ");
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        
        System.out.println(min);
        
        for(int i = 0; i < numbers.length; i++){
            int number = Integer.parseInt(numbers[i]);
            
            min = Math.min(min, number);
            max = Math.max(max, number);
        }

        answer = min+ " " +max;
        return answer;
    }
}

 

■ 코드풀이

Math.max()와 Math.min() 함수는 파라미터로 입력받은 숫자들 중 '최대값'과 '최소값'을 구해서 리턴하는 함수이다.

 

해당 코드를 해석해보면 함수 호출과 동시에 파라미터 값으로 들어온 문자열 s를

split()함수를 이용하여 공백을 기준으로 문자열을 잘라 String[]배열에 차례로 넣어주게 된다. 

변수로는 min과 max를 선언하여 Integer => 정수형에서 가장 큰 값을 min에 대입해주고 

Integer => 정수형에서 가장 작은 값은 max에 대입시켜준다. 

 

 

코드 분석을 할때 왜 min에다가 Integer.max값을 넣고 max에는 Integer.min값을 넣은거지?? 했다.

 

앞서 spilit()함수를 이용하여 공백기준 문자열을 자른 값 배열인 number의 값(문자형)을 정수형으로 바꿔주기 위해 

Integer.parseInt()로 형을 바꾸어주고, Math.min(비교값, 비교값)/Math.max(비교값, 비교값) 함수를 활용하게 되는데 

이때 min(정수형 가장 큰 값인 2147483647, 배열에 들어있는 값) 을 비교하게 되면 for문을 돌면서 배열의 가장 작은 값을 찾아낼 수 있다.

max도 마찬가지고(정수형 가장 작은 값인 -2147483648, 배열에 들어있는 값)을 비교하여 배열의 가장 큰 값을 뽑아 낼 수 있음을 알 수 있다. 

 

파이썬과 자바모두 알고리즘을 수월하게 풀기 위해서 함수 활용을 적절하게 잘 사용해야된다고 느끼는 요즘이다.