프로그래머스 lv.2 - 12939 최댓값과 최솟값 문제 풀이
문제 설명
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.
문제의 자세한 내용은 해당 링크를 통해 확인 : 문제 링크
풀이 코드
import java.util.Arrays;
class Solution {
public String solution(String s) {
int min = Arrays.stream(s.split(" ")).mapToInt(Integer::valueOf).min().orElse(0);
int max = Arrays.stream(s.split(" ")).mapToInt(Integer::valueOf).max().orElse(0);
String answer = min + " " + max;
return answer;
}
}
반복문을 사용한 코드
더보기
import java.util.Arrays;
class Solution {
public String solution(String s) {
String[] sArray = s.split(" ");
int min = Integer.valueOf(sArray[0]), max = Integer.valueOf(sArray[0]);
for(String o : sArray) {
Integer i = Integer.valueOf(o);
if(min > i) {
min = i;
}
if(max < i) {
max = i;
}
}
String answer = min + " " + max;
return answer;
}
}
문제 해결 전략
이라 쓰고 문제를 보고서 어떻게 풀면 될까?에 대한 생각을 정리한 항목
왜 난이도가 lv.2로 책정이 되어있는지 잘 모르겠던 문제..
stream을 사용하면 간단하게 바로 구할 수 있다!
그런데 stream으로 구현을 했더니 거의 모든 테스트에서 10ms를 초과!
그래서 for문을 사용하여 구현하면 얼마나 차이가 날까? 라는 궁금증에 구현을 해보았다. (위에서 접힌 코드)
그랬더니 12개의 테스트 중 3개를 제외하고 전부 10ms 미만의 속도가 나왔다!
사실 8 ~ 9ms가 나왔기 때문에 엄청나게 큰 차이는 아니라고 생각이 되지만 왜 이런 차이가 나왔는지 의문이다.
일단 stream을 2번 사용하면서 2회의 반복이 일어나고, 반복문 사용 코드는 for문 1회 내에서 끝냈기 때문일까..? 🤔
(그런데 split() 메서드 사용 때문에 결국 비슷한게 아닌가..?)
코드를 업로드해 둔 깃 허브
'Develop > Algorithm' 카테고리의 다른 글
우테코 온보딩 - Problem 2 (0) | 2022.11.09 |
---|---|
우테코 온보딩 - Problem 1 (0) | 2022.11.09 |
프로그래머스 lv.1 - 131128 숫자 짝꿍 (2) | 2022.11.03 |
프로그래머스 lv.2 - 92335 k진수에서 소수 개수 구하기 (0) | 2022.11.03 |
프로그래머스 Lv.1 - 118666 성격 유형 검사하기 (0) | 2022.10.24 |