
Problem ๐ป
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์๋ ๋ ์ด์์ ์ ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
| "1 2 3 4" | "1 4" |
| "-1 -2 -3 -4" | "-4 -1" |
| "-1 -1" | "-1 -1" |
Approach 1 โ - ๋์ ์ด๊ธฐ ์ ๊ทผ๋ฒ
์ผ๋จ ์ด ๋ฌธ์ ์์๋ ๊ณต๋ฐฑ์ด ๋ฌธ์๋ฅผ ๋๋๋ ๊ธฐ์ค์ด๋ผ๊ณ ํ์ผ๋ ,์ ๊ฐ์ ์ญํ ๋ก ์ด๋ป๊ฒ ์ธ์ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ
๋ฐฐ์ด์ ์์๋ค ์ค ์ด๋ป๊ฒ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ณจ๋ผ๋ด๋ ๋ฌธ๋ฒ๋ ๋ชจ๋ฅด๊ฒ ๋ค.
Approach 2 โญ - ๋์ ์ ๊ทผ๋ฒ์ ๋ํ ๊ต์
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ๋ฌธ์์ด์์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ์ซ์๋ฅผ ๋ถ๋ฆฌํ ๋ค, ๊ฐ ์ซ์๋ฅผ ๋น์ํ์ฌ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์๋ด๋ ๋ฌธ์ .
Solution ๐ก
1. ๋ฌธ์์ด ๋ถ๋ฆฌ:
- ์ฃผ์ด์ง ๋ฌธ์์ด s๋ฅผ ๊ณต๋ฐฑ(" ")์ ๊ธฐ์ค์ผ๋ก ๋๋๋ค. ์๋ฐ์์๋ split()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ ์ซ์๋ ๋ฐฐ์ด์ ์์๋ก ์ ์ฅ๋๋ค.
2. ์ต์๊ฐ ๋ฐ ์ต๋๊ฐ ์ด๊ธฐํ :
- ์ซ์๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ๋จผ์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ต์๊ฐ(min) ๋ฐ ์ต๋๊ฐ(max)์ผ๋ก ์ด๊ธฐํํ๋ค.
- ๋ฌธ์์ด๋ก ์ ์ฅ๋ ์ซ์๋ฅผ ๋น๊ตํ๊ธฐ ์ํด์๋ ์ ์ํ์ผ๋ก ๋ณํํด์ผ ํ๋ค. ์๋ฐ์์๋ Integer.parseInt()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
3. ๋ฐฐ์ด ์ํํ๋ฉฐ ์ต์๊ฐ ๋ฐ ์ต๋๊ฐ ์ ๋ฐ์ดํธ :
- ๊ฐ ์ซ์๋ฅผ ์ํํ๋ฉฐ ํ์ฌ ์ต์๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ต์๊ฐ์ ์ ๋ฐ์ดํธ, ์ต๋๊ฐ๋ณด๋ค ํฌ๋ฉด ์ต๋๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
4. ๊ฒฐ๊ณผ ๋ฐํ :
- ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ฌธ์์ด๋ก ๊ฒฐํฉํ์ฌ ๋ฐํํ๋ค. ์๋ฐ์์๋ ๋ฌธ์์ด์ ๊ฒฐํฉํ ๋ +์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
import java.util.*;
class Solution {
public String solution(String s) {
// ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด ๋๋๊ธฐ
String[] numbers = s.split(" ");
// ์ต์๊ฐ๊ณผ ์ต๋๊ฐ ์ด๊ธฐํ
int min = Integer.parseInt(numbers[0]);
int max = Integer.parseInt(numbers[0]);
// ๋ฐฐ์ด ์ํํ๋ฉฐ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ ์ฐพ๊ธฐ.
for (String num : numbers) {
int current = Integer.parseInt(num);
if (current < min) {
min = current;
}
if (current > max) {
max = current;
}
}
// ๊ฒฐ๊ณผ๋ฅผ "(์ต์๊ฐ) (์ต๋๊ฐ)" ํ์์ ๋ฌธ์์ด๋ก ๋ฐํ
return min + " " + max;
}
}
Reference ๐ - ์คํฐ๋์์ ์ฐพ์ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค
package programmers.maxAndMin;
import java.util.Arrays;
public class Solution {
// Arrays.sort() ์์ด ๊ตฌํ, ์ ์
public String solution(String s) {
String answer = "";
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
int num;
String[] strArr = s.split(" ");
// O(n)
for (int i = 0; i < strArr.length; i++) {
num = Integer.parseInt(strArr[i]);
if (num < min) min = num;
if (num > max) max = num;
}
answer = min + " " + max;
return answer;
}
// ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ, Arrays.sort() ์ฌ์ฉ
public String solution2(String s) {
String answer = "";
int min, max;
String[] strArr = s.split(" ");
int[] numArr = new int[strArr.length];
for (int i = 0; i < strArr.length; i++) {
numArr[i] = Integer.parseInt(strArr[i]);
}
Arrays.sort(numArr);
min = numArr[0];
max = numArr[numArr.length - 1];
answer = min + " " + max;
return answer;
}
// ์คํธ๋ฆผ ์ฌ์ฉ
public String solution3(String s) {
String answer = "";
String[] strArr = s.split(" ");
// ์ ์ ์คํธ๋ฆผ
int[] numArr = Arrays.stream(strArr).mapToInt(Integer::parseInt).toArray();
Arrays.sort(numArr);
// ์ง๋ ๋ฒ์
int[] sortedNumArr = Arrays.stream(Arrays.stream(strArr).mapToInt(Integer::parseInt).toArray()).sorted().toArray();
answer = numArr[0] + " " + numArr[numArr.length - 1];
return answer;
}
public static void main(String[] args) {
String ex1 = "1 2 3 4";
String ex2 = "-1 -2 -3 -4";
String ex3 = "-1 -1";
Solution solutionClass = new Solution();
System.out.println(solutionClass.solution(ex1));
System.out.println(solutionClass.solution(ex2));
System.out.println(solutionClass.solution(ex3));
System.out.println(solutionClass.solution2(ex1));
System.out.println(solutionClass.solution2(ex2));
System.out.println(solutionClass.solution2(ex3));
System.out.println(solutionClass.solution3(ex1));
System.out.println(solutionClass.solution3(ex2));
System.out.println(solutionClass.solution3(ex3));
}
}
- 1 - ์ผ๋จ ์ฒซ๋ฒ์งธ Solution๋ฉ์๋ (์ ์์ ๋ฐฉ๋ฒ) ๋ถ์ํด๋ณผ๊น?
package programmers.maxAndMin;
import java.util.Arrays;
public class Solution {
// Arrays.sort() ์์ด ๊ตฌํ, ์ ์
public String solution(String s) {
String answer = "";
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
int num;
String[] strArr = s.split(" ");
// O(n)
for (int i = 0; i < strArr.length; i++) {
num = Integer.parseInt(strArr[i]);
if (num < min) min = num;
if (num > max) max = num;
}
answer = min + " " + max;
return answer;
}
1.1 ์ด ์ฝ๋์ ํต์ฌ ๋ ผ๋ฆฌ
1) ๋ฌธ์์ด s๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋๋์ด ์ซ์ ๋ฐฐ์ด(strArr)๋ก ๋ณํ.
(๋๋ ์ฒ์์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ์๋ ๋ฌธ์์ด๊ณผ ์ซ์๋ฐฐ์ด์ ๊ตฌ๋ถ์กฐ์ฐจ ํ์ง ๋ชปํ๋ค. ๊ทธ๋์ ๋ณํ์ ํด์ผ ํ๋ค๋ ์๊ฐ๋ ํ์ง ๋ชปํ๋ค. )
2) ์ซ์ ๋ฌธ์์ด์ ์ ์๋ก ๋ณํํ๋ฉด์ ์ต์๊ฐ(mim)๊ณผ ์ต๋๊ฐ(max)์ ๊ณ์ฐ.
3) ๊ณ์ฐ๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ฌธ์์ด๋ก ์กฐํฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ.
(์ด ๋ฌธ์ ์ ํฌ์ธํธ๋ ๋ฌธ์์ด => ์ซ์๋ฐฐ์ด , ์ ์ ๋ณํ, ์ต์๊ฐ ์ต๋๊ฐ ์ฐพ๋ ๋ฒ )
1.2 ๊ตฌํ ํ๋ฆ
1.2.0 ๋ฌธ์์ด ๋ณ์ ์ด๊ธฐํ
String answer = "";
" ": ๋น ๋ฌธ์์ด. ์๋ฌด ๋ด์ฉ์ด ์๋ ๋ฌธ์์ด์ ์๋ฏธํ๋ค.
์ด๊ธฐํ๋ ํ๋ก๊ทธ๋จ์์ ๋ณ์์ ์ฌ์ฉ์ ์ค๋นํ๋ ๊ณผ์ ์ด๋ค.
๋น ๋ฌธ์์ด๋ก ์ด๊ธฐํ๋ฅผ ํ๋ ์ด์ ๋
1. ๊ฐ ๋๋ฝ ๋ฐฉ์ง : ์๋ฐ์์๋ ๋ณ์๋ฅผ ์ด๊ธฐํํ์ง ์๊ณ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ด๊ธฐ๊ฐ(" ")์ ํ ๋นํ์ฌ ๋ณ์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ํ๋ค.
2. ๋์ค์ ๊ฐ ์ค์ : answer๋ ์ดํ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ํฌํจํ ๋ฌธ์์ด๋ก ์ค์ ๋ ์์ ์ด๋ค. ์ด๊ธฐ๊ฐ์ ์ค์ ํด๋๋ฉด ์ถํ ๊ฐ์ ๋์ ํ๊ฑฐ๋ ์์ ํ๊ธฐ ์ฝ๋ค.
1.2.1 ๋น๊ต ๊ฐ๋ฅํ๊ฒ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ ์ ์ธ๋ฌธ
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
• Integer.MAX_VALUE: ์๋ฐ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์.
• Integer.MIN_VALUE: ์๋ฐ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ์์ ์ ์.
• ์ด๊น๊ฐ์ ์ด๋ค๋ก ์ค์ ํ์ฌ ๋น๊ต ์ฐ์ฐ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ก ํจ.
์๋ฐ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์์ ๊ฐ์ฅ ์์ ์ ์๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ ๋ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ ํํ ๊ณ์ฐํ๊ธฐ ์ํ ๋ ผ๋ฆฌ์ ์ธ ํ์์ฑ ๋๋ฌธ์ด๋ค.
1.2.1-1 ์ต์๊ฐ/ ์ต๋๊ฐ ๊ณ์ฐ์ ๊ธฐ๋ณธ ๋ ผ๋ฆฌ
์ต์๊ฐ์ ๊ณ์ฐํ๋ ค๋ฉด :
- ์ด๊ธฐ๊ฐ(min)์ ํ์ฌ ๊ฐ๋ณด๋ค ํญ์ ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.
- ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๊ธฐ ์ํด ๋งค๋ฒ ๋น๊ตํ๋ฉด์ ๋ ์์ ๊ฐ์ด ๋์ค๋ฉด ์ด๋ฅผ min์ผ๋ก ์ ์ฅํ๋ค.
์ต๋๊ฐ์ ๊ณ์ฐํ๋ ค๋ฉด :
- ์ด๊ธฐ๊ฐ(max)์ ํ์ฌ ๊ฐ๋ณด๋ค ํญ์ ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.
- ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ๊ธฐ ์ํด ๋งค๋ฒ ๋น๊ตํ๋ฉด์ ๋ ํฐ ๊ฐ์ด ๋์ค๋ฉด ์ด๋ฅผ max์ ์ ์ฅ
์ด๊ธฐ๊ฐ์ผ๋ก ์ผ๋ฐ์ ์ธ ์ซ์๋ฅผ ์ค๋ช ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ง์ฝ์ int min = 0;์ผ๋ก ํ๋ค๋ฉด
๋ฐฐ์ด์ด {1,2,3}์ธ ๊ฒฝ์ฐ
์ฒซ ๋ฒ์งธ ์ซ์ 1๊ณผ ๋น๊ต: 1 < 0์ false, min์ ์ฌ์ ํ 0.
๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ชป๋ ๊ฐ 0์ ๋ฐํํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
1.2.2 strArr์ด๋ผ๋ ๋ฌธ์์ด ๋ฐฐ์ด์ ์์ฑํ๊ณ , split๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด ๋๋๊ธฐ.
String[] strArr = s.split(" ");
- split ๋ฉ์๋ : ์๋ฐ์ Stringํด๋์ค์ ์ ์๋ ๋ฉ์๋๋ก, ํน์ ๊ตฌ๋ถ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ๋๋์ด ๋ฐฐ์ด(String[])๋ก ๋ฐํํ๋ค.
์ฌ๊ธฐ์ split(" ")๋ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ๋๋๋ค.
- s.์ ์๋ฏธ
s๋ solutionํจ์์ ๋งค๊ฐ๋ณ์์ธ ๋ฌธ์์ด ๊ฐ์ฒด์ด๋ค. ๋ฌธ์์ด ๊ฐ์ฒด s์ ๋ด์ฉ์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋๋๋ผ๋ ์๋ฏธ์ด๋ค.
๊ฐ์ฒด s๊ฐ ๋ฌธ์์ด์ด๋ฏ๋ก, ์๋ฐ์์ ์ ๊ณตํ๋ Stringํด๋์ค์ ๋ฉ์๋์ธ split์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
์ด๋, s.๋ ๋ฌธ์์ด s์ ๋ํด split ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค๋ ๊ฒ์ ๋ํ๋ธ๋ค.
1.2.3 strArr ๋ฌธ์์ด์ ์์๋ฅผ ํ๋์ฉ ์ ์๋ก ๋ฐ๊ฟ์ min๊ณผ max๊ฐ ๋ฃ๊ธฐ.
for (int i = 0; i < strArr.length; i++) {
num = Integer.parseInt(strArr[i]);
if (num < min) min = num;
if (num > max) max = num;
}
1.2.3-1 Integer.parseInt() ๋ฉ์๋
Integer.parseInt(String s)๋ ์๋ฐ์์ ์ ๊ณตํ๋ Integerํด๋์ค์ ์ ์ (static)๋ฉ์๋์ด๋ค.
์ญํ : ๋ฌธ์์ด(String)์ ์ ์ํ(int)์ผ๋ก ๋ณํ.
1.2.3-2 strArr[i]์ ์ญํ
strArr์ String๋ฐฐ์ด๋ก, split(" ")๋ฉ์๋์ ์ํด ์์ฑ๋ ๋ฐฐ์ด์ด๋ค.
strArr[i]๋ ๋ฐฐ์ด์ i๋ฒ์งธ ์์๋ฅผ ์๋ฏธํ๋ค.
1.2.3-3 Integer.parseInt(strArr[i])์ ์ ์ฒด ๋์
strArr[i]: ๋ฐฐ์ด์์ i๋ฒ์งธ ๋ฌธ์์ด ์์๋ฅผ ๊ฐ์ ธ์ด.
Integer.parseInt(): ํด๋น ๋ฌธ์์ด์ ์ ์๋ก ๋ณํ.
๊ฒฐ๊ณผ: ๋ฌธ์์ด์ด ์ ์๋ก ๋ณํ๋์ด ๋ณ์ num์ ์ ์ฅ
for ๋ฐ๋ณต๋ฌธ์์ strArr[i]์ ๊ฐ์ ์ ์๋ก ๋ณํํ์ฌ ๋ณ์ num์ ์ ์ฅ.
- ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ฐ ์ซ์๋ฅผ ๊ฒ์ฌํ์ฌ min๊ณผ max๋ฅผ ๊ฐฑ์ .
์ max๋ num์ผ๋ก ์ค์ ํ๊ณ min๋ num์ผ๋ก ์ค์ ํ์๋๊ฐ?
์ด ๋ถ๋ถ์ ๋ณ์์ ์ญํ ๊ณผ ์ํ ๋ณํ๋ฅผ ์ดํดํ๋๋ฐ ์ค์ํ ํฌ์ธํธ์ด๋ค.
1. ๋ณ์๋ค์ ์ญํ
1) num :
- num์ ํ์ฌ ๋ฐ๋ณต ์ค์ ์ฒ๋ฆฌ๋๋ ํ๋์ ์ซ์๋ฅผ ์ ์ฅํ๋ '์์ ๋ณ์'์ด๋ค.
- ๋ฐ๋ณต๋ฌธ์ด ํ ๋ฒ ์คํ๋ ๋๋ง๋ค strArr[i]์ ๊ฐ์ ์ ์๋ก ๋ณํํ์ฌ num์ ์ ์ฅํ๋ค.
- ์ด ๋ณ์๋ ํ๋ฒ์ ํ๋์ ์ซ์๋ง ๋ด๋๋ค.
2) min๊ณผ max :
- min์ ํ์ฌ๊น์ง ๋ฐ๊ฒฌ๋ ๊ฐ์ฅ ์์ ๊ฐ์ ์ ์ฅ.
- max๋ ํ์ฌ๊น์ง ๋ฐ๊ฒฌ๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ์ฅ.
- ๋ฐ๋ณต์ด ์งํ๋๋ฉด์ min๊ณผ max๋ ๊ณ์ ์ ๋ฐ์ดํธ ๋์ง๋ง, num์ ๋งค๋ฒ ์๋ก์ด ๊ฐ์ผ๋ก ๋ฎ์ด์์์ง๋ค.
์ min๊ณผ max๋ ๋ชจ๋ num์ ์ฐธ์กฐํ๋๊ฐ?
์ฝ๋์์ min๊ณผ max๋ num์ ์ฌ์ฉํด ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ ๋๋ค.
1) ๋ฐ๋ณต๋ฌธ์ด ์์๋๋ฉด, ํ์ฌ ์ซ์๋ฅผ num์ ์ ์ฅ.
2) ์กฐ๊ฑด๋ฌธ์์ :
- num์ด min๋ณด๋ค ์์ผ๋ฉด : min = num;์ผ๋ก ์ต์๊ฐ ๊ฐฑ์
- num์ด max๋ณด๋ค ํฌ๋ฉด: max = num;์ผ๋ก ์ต๋๊ฐ ๊ฐฑ์ .
3) ๋ค์ ๋ฐ๋ณต์์ num์ ์๋ก์ด ๊ฐ์ผ๋ก ๋ฐ๋๊ณ , min๊ณผ max๋ ๊ฐฑ์ ๋ ์ํ๋ฅผ ์ ์งํ๋ค.
๋ณ์๊ฐ ํผ๋์ด ์๋ ์ด์ ?
min๊ณผ max๋ ๋ฐ๋ณต๋ฌธ์ด ์งํ๋ ์๋ก ์ถ์ ๋ ๊ฐ์ ์ ์ฅํ๊ณ , num์ ์๊ฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฐ๋ง ์ ์ฅํ๋ค.
• num:
์๋ช : ๋ฐ๋ณต๋ฌธ์ด ์คํ๋๋ ํ ๋ฒ์ ๋ฐ๋ณต ๋์.
์ญํ : ํ ๋ฒ์ ๋ฐ๋ณต์์๋ง ์ฌ์ฉํ๋ ์์ ๊ฐ.
• min๊ณผ max:
์๋ช : ๋ฐ๋ณต๋ฌธ ์ ์ฒด ๋์ ์ ์ง.
์ญํ : ์ ์ฒด ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋ฉด์ ํ์ฌ๊น์ง์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ ์ฅ.
1.2.4 ๋ฌธ์์ด์ min๊ณผ max๊ฐ ๋ฃ๊ธฐ
answer = min + " " + max
min๊ณผ max๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ๊ฒฐ๊ณผ ๋ฌธ์์ด ์์ฑ.
์๊ฐ ๋ณต์ก๋
• split: O(n) (n์ ๋ฌธ์์ด ๊ธธ์ด)
• ๋ฐ๋ณต๋ฌธ: O(n) (n์ ๋ฐฐ์ด ๊ธธ์ด)
• ์ดํฉ: O(n)
- 2 - solution2 ๋ฉ์๋ (์ ๋ ฌ ์ฌ์ฉ)
package programmers.max;
import java.util.Arrays;
import java.util.Random;
public String solution2(String s) {
String answer = "";
int min, max;
String[] strArr = s.split(" ");
int[] numArr = new int[strArr.length];
for (int i = 0; i < strArr.length; i++) {
numArr[i] = Integer.parseInt(strArr[i]);
}
Arrays.sort(numArr);
min = numArr[0];
max = numArr[numArr.length - 1];
answer = min + " " + max;
return answer;
}
2.1 ์ด ๋ฐฉ๋ฒ์ ํต์ฌ ๋ ผ๋ฆฌ:
1. ๋ฌธ์์ด s๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋๋์ด ๋ฐฐ์ด๋ก ๋ณํ.
2. ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ ์๋ก ๋ณํํ ํ ์ ๋ ฌ.
3. ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ(์ต์๊ฐ)๊ณผ ๋ง์ง๋ง ๊ฐ(์ต๋๊ฐ)์ ์ฌ์ฉํด ๊ฒฐ๊ณผ ๋ฐํ.
2.2 ๊ตฌํ ํ๋ฆ
int [] numArr = new int[strArr.length];
for (int i = 0; i < strArr.length; i++) {
numArr[i] = Integer.parseInt(strArr[i]);
}
Arrays.sort(numArr);
- Arrays.sort : ์ ์ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ.
min = numArr[0];
max = numArr[numArr.length - 1];
- ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๊ฐ์ ์ต์๊ฐ, ๋ง์ง๋ง ๊ฐ์ ์ต๋๊ฐ.
์๊ฐ ๋ณต์ก๋
• split: O(n)
• for ๋ฐ๋ณต๋ฌธ: O(n)
• Arrays.sort: O(n log n)
• ์ดํฉ: O(n log n)
- 3- solution3 ๋ฉ์๋ (์คํธ๋ฆผ ์ฌ์ฉ)
public String solution3(String s) {
String answer = "";
String[] strArr = s.split(" ");
// ์ ์ ์คํธ๋ฆผ
int[] numArr = Arrays.stream(strArr).mapToInt(Integer::parseInt).toArray();
Arrays.sort(numArr);
// ์ง๋ ๋ฒ์
int[] sortedNumArr = Arrays.stream(Arrays.stream(strArr).mapToInt(Integer::parseInt).toArray()).sorted().toArray();
answer = numArr[0] + " " + numArr[numArr.length - 1];
return answer;
}
3.1 ํต์ฌ ๋ ผ๋ฆฌ
1) ๋ฌธ์์ด ๋ฐฐ์ด์ Stream์ผ๋ก ๋ณํํ๊ณ , ์ด๋ฅผ ์ ์ ๋ฐฐ์ด๋ก ๋งคํ.
2) ์คํธ๋ฆผ์ ์ฌ์ฉํด ๋ฐฐ์ด์ ์ ๋ ฌ.
3) ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ(์ต์๊ฐ)๊ณผ ๋ง์ง๋ง ๊ฐ(์ต๋๊ฐ)์ ์ฌ์ฉํด ๊ฒฐ๊ณผ ๋ฐํ
int[] numArr = Arrays.stream(strArr)
.mapToInt(Integer::parseInt)
.toArray();
Arrays.sort(numArr);
์คํธ๋ฆผ์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ค์ ๊ฒ์๋ฌผ์....
3.2 ๊ตฌํ ํ๋ฆ
int[] numArr = Arrays.stream(strArr)
.mapToInt(Integer::parseInt)
.toArray();
Arrays.sort(numArr);
- Arrays.stream : ๋ฐฐ์ด์ ์คํธ๋ฆผ์ผ๋ก ๋ณํ.
- mapToInt : ์คํธ๋ฆผ์ ๊ฐ ์์๋ฅผ Integer.parseInt๋ก ๋ณํ.
- toArray : ์คํธ๋ฆผ์ ๋ฐฐ์ด๋ก ๋ณํ.
int[] sortedNumArr = Arrays.stream(Arrays.stream(strArr))
.mapToInt(Integer::parseInt)
.toArray())
.sorted()
.toArray();
- ์คํธ๋ฆผ์ sorted๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ฐํ.
์๊ฐ ๋ณต์ก๋
• split: O(n)
• ์คํธ๋ฆผ ์ฒ๋ฆฌ ๋ฐ ์ ๋ ฌ: O(n log n)
• ์ดํฉ: O(n log n)