Algorithm/프로그래머스

프로그래머스_최댓값과 최솟값(JAVA)

류진주 2021. 7. 9. 23:25

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

 

코딩테스트 연습 - 최댓값과 최솟값

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

programmers.co.kr

문제 설명

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

[문제 분석]

한자리 이상의 문자열, 예를 들어 10, 100과 같은 수가 들어왔을 때를 고려하지 않고 한자리 숫자로 예상하고 풀어 처음에 문제 해결에 실패했다. 

공백을 기준으로 split해서 풀면 쉽게 해결될 걸 왜 그렇게 접근했나 모르겠다.

1. 우선 공백을 기준으로 s를 나누어 문자열 배열에 저장한다.

2. 문자열 배열에서 해당 원소가 '-'로 시작하면 -1을 곱해주고, 그렇지 않다면 그대로 숫자로 변환하여 arraylist에 저장한다.

3. 그 후 arraylist를 정렬한 후,

4. 최종적으로 첫번째 원소와 마지막 원소 사이에 공백을 추가한 문자열을 생성해 반환한다.

 

[코드]

import java.util.*;
class Solution {
    public String solution(String s) {
        String answer = "";
       
        ArrayList<Integer> al = new ArrayList<>();
        String[] str = s.split(" ");
 
        for(int i=0;i<str.length;i++)
        {
            if(str[i].charAt(0)=='-')
                al.add(-1*Integer.parseInt(str[i].substring(1)));
                
            else
                al.add(Integer.parseInt(str[i]));
            
        }        
        Collections.sort(al);
        
        answer = Integer.toString(al.get(0))+" "+Integer.toString(al.get(al.size()-1));
        
        return answer;
    }
}