출처: 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));
}
}