
주어진 문자열을 공백을 기준으로 하여 숫자로 분리하고, 그것에서 최소값과 최대값을 뽑아내는 문제이다.
function solution0(s) {
let answer;
let number = s.split(" ").map(Number);
let min = number[0];
let max = number[0];
for (i = 1; i < number.length; i++) {
const now = number[i];
if (min > now) {
min = now;
}
if (max < now) {
max = now;
}
}
answer = `${min} ${max}`;
return answer;
}
시간복잡도 : O(n)
문자열인 녀석들을 공백기준으로 숫자로 만든 뒤 for문에서 크기를 비교한다
원래는 s = s.split(" ").map(Number);를 사용하고 싶었으나 반복해서 s를 사용해야해서 조금 다르게 구현했다
function solution1(s) {
const arr = s.split(" ");
return Math.min(...arr) + " " + Math.max(...arr);
}
Math.min을 사용하기 때문에 map(number)가 없다.
선정 사유 : 가장 코드가 짧아서
function solution2(s) {
var arr = s.split(" ");
arr.sort((a, b) => a - b);
var answer = arr[0] + " " + arr[arr.length - 1];
return answer;
}
시간복잡도 : O(n)
sort를 사용한뒤 가장 처음과 마지막의 원소를 리턴한다
선정 사유 : sort를 사용하였기 때문에 매우 느릴것이라고 판단함
function solution00(s) {
let number = s.split(" ").map(Number);
let min = number[0];
let max = number[0];
for (i = 1; i < number.length; i++) {
const now = number[i];
if (min > now) {
min = now;
}
if (max < now) {
max = now;
}
}
return `${min} ${max}`;
}
시간복잡도 :
변수를 따로 만들지 않고 바로 return에 넣는게 더 빨라보여서 이렇게 바꾸었다.

띠용? 실제로 해보니 후자의 방법이 의미가 없는 수준이긴 하지만 더 느렸다??
전부다 확인을 해봐야겠다
0으로 끝나는 것은 answer 라는 변수를 만든뒤 그것을 return에 넣은것, 1로 끝나는 것은 쌩으로 return에 넣은 것이다

딱한번 예외가 있긴했는데 변수를 만들어서 넣는것보다 그냥 return하는게 더 느리다?
입력값의 크기는 현재 -100에서 100 사이의 숫자 100개이다. 이제 범위를 -300~300의 숫자 300개로 증가시켜보자

3 log_{2}^{3} ≒ 4.76 이기때문에 3배가 넘는 증가량은 말이 된다.

혹시나 길이는 같지만 범위가 줄어들면 차이가 있을까 싶어서 범위를 -300~300그대로 두고 길이를 300이 아니라 100으로 바꾸었다

범위에는 영향을 받지 않고 길이에만 영향을 받는다.
return에 값을 직접 넣는것보다 변수에 값을 넣는것이 조금이나마 더 빠르다.
속도의 차이는 의미 없는 수준이며 속도가 아니라 코드 가독성을 위해서라도 변수에 넣는게 좋을 것 같다
시간복잡도에서 입력값의 범위는 영향을 주지 않는다.
물론 알고리즘의 종류에 따라서 다를 수 있겠지만, 이번 알고리즘은 공백을 기준으로 나누는것 외에는 별달느 처리가 없기 때문에 입력값의 범위는 문제가 되지 않았던것같다.