[오늘의 문제] 최댓값과 최솟값

shlim55·2025년 7월 8일

코딩테스트

목록 보기
99/223

출처: https://school.programmers.co.kr/learn/courses/30/lessons/12939

문제 설명
문자열 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"

내가 작성한 코드문

class Solution {
    public String solution(String s) {
        String answer = "";
        // str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환
        
        String [] arr = s.split(" ");
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        
        String maxString = "";
        String minString = "";
        
        // 최솟값 추출하는 반복문
        for(int i = 0; i < arr.length; i++){
            if(min > Integer.parseInt(arr[i])){
                min = Integer.parseInt(arr[i]);
                minString = arr[i];
            }
        }
        
        // 최댓값 추출하는 반복문
        for(int i = 0; i < arr.length; i++){
            if (max < Integer.parseInt(arr[i])){
                max = Integer.parseInt(arr[i]);
                maxString = arr[i];
            }
        }
        
        answer = minString + " " + maxString;
        
        return answer;
    }
}

맨 처음에 최댓값과 최솟값이 같은 값이 출력 되었다.

알고보니 maxString, minString 변수에만 저장 되고
min, max 변수는 갱신이 안되어서 그랬다.

아예 최댓값 추출하는 반복문 내 조건문을 한 반복문에 두는것도 좋은생각이다.

거기다가 maxString, minString 도 굳이 필요 없다.

class Solution {
    public String solution(String s) {
        String answer = "";
        // str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환
        
        String [] arr = s.split(" ");
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        
        // String maxString = "";
        // String minString = "";
        
        // 최솟값 추출하는 반복문
        for(int i = 0; i < arr.length; i++){
            if(min > Integer.parseInt(arr[i])){
                min = Integer.parseInt(arr[i]);
                // minString = arr[i];
            }
            
            if (max < Integer.parseInt(arr[i])){
                max = Integer.parseInt(arr[i]);
                // maxString = arr[i];
            }
        }
        
        // 최댓값 추출하는 반복문
//         for(int i = 0; i < arr.length; i++){
            
//         }
        
        answer = min + " " + max;
        
        return answer;
    }
}

다른 사람의 풀이

public class GetMinMaxString {
    public String getMinMaxString(String str) {
        String[] tmp = str.split(" ");
        int min, max, n;
        min = max = Integer.parseInt(tmp[0]);
        for (int i = 1; i < tmp.length; i++) {
                n = Integer.parseInt(tmp[i]);
            if(min > n) min = n;
            if(max < n) max = n;
        }

        return min + " " + max;

    }

    public static void main(String[] args) {
        String str = "1 2 3 4";
        GetMinMaxString minMax = new GetMinMaxString();
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("최대값과 최소값은?" + minMax.getMinMaxString(str));
    }
}

위의 풀이는 내가 한 풀이와 유사하다.

import java.util.Arrays;

public class GetMinMaxString {
    public String getMinMaxString(String str) {

        String[] array = str.split(" ");
        int[] arrayInt = new int[array.length];

        for (int i = 0; i < arrayInt.length; i++) {
            arrayInt[i] = Integer.parseInt(array[i]);
        }

        Arrays.sort(arrayInt);
        String result = arrayInt[0] + " " + arrayInt[arrayInt.length - 1];

        return result;

    }

    public static void main(String[] args) {
        String str = "9 19";
        GetMinMaxString minMax = new GetMinMaxString();
        // 아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("최대값과 최소값은?" + minMax.getMinMaxString(str));
    }
}

내림 차순 정렬후 제일 앞에거(제일 작은 수)와 제일 나중거(제일 큰 수)를 문자열로 변환후 반환하는 방식

import java.util.Arrays;
public class GetMinMaxString {
    public String getMinMaxString(String str) {
        String[] arrStr = str.split(" ");//  문자열 배열 arrStr로 split
        int[] arrInt = new int[arrStr.length];
        int i=0;
        for(String part : arrStr){
          arrInt[i] = Integer.parseInt(part);// 문자열을 정수로 변환해서 arrInt 배열에 저장
          i++;
        }

        StringBuffer sb = new StringBuffer();
        sb.append(Arrays.stream(arrInt).min().getAsInt());// arrInt 배열에서 최솟값 추출
        sb.append(" ");
        sb.append(Arrays.stream(arrInt).max().getAsInt());// arrInt 배열에서 최댓값 추출

        return sb.toString();
    }

    public static void main(String[] args) {
        String str = "1 2 3 4";
        GetMinMaxString minMax = new GetMinMaxString();
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("최대값과 최소값은?" + minMax.getMinMaxString(str));
    }
}
profile
A Normal Programmer

0개의 댓글