diff --git "a/raejun/JadenCase\353\254\270\354\236\220\354\227\264\353\247\214\353\223\244\352\270\260.js" "b/raejun/JadenCase\353\254\270\354\236\220\354\227\264\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..e68cd65 --- /dev/null +++ "b/raejun/JadenCase\353\254\270\354\236\220\354\227\264\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,37 @@ +function solution(s) { + const isNumber = (v) => { + return "0" <= v && v <= "9"; + }; + + return s + .split(" ") + .map((v) => { + if (v === "") return ""; + + if (isNumber(v[0])) { + return v.toLowerCase(); + } else { + const str = v.toLowerCase(); + const first = str[0].toUpperCase(); + + return first + str.slice(1, str.length); + } + }) + .join(" "); +} + +/* +풀이 시간: 21분 + +시간 복잡도는 O(n)이다. +공간 복잡도는 O(n)이다. + +문자열을 공백으로 분리해서 배열로 만들고, 배열의 요소들을 순회하면서, 각 요소의 첫 번째 문자가 숫자인지 확인했다. +만약 첫 번째 문자가 숫자라면, 해당 요소를 소문자로 변환해서 반환했다. +만약 첫 번째 문자가 숫자가 아니라면, 해당 요소를 소문자로 변환한 뒤에, 첫 번째 문자를 대문자로 변환해서 반환했다. +마지막으로, 배열의 요소들을 공백으로 연결해서 반환했다. + +숫자인지를 확인하는 과정에서 문자열 숫자를 판단해야 되는데 숫자를 판단하고 있었다. +또한, spilt(' ')으로 나누면 맨 앞이 공백이 될 수 있다는 것을 간과하여 시간이 오래 걸렸다. +맨 앞이 숫자거나 문자거나 상관없이 대문자로 만들어도 문제가 없을 것 같다. +*/ diff --git "a/raejun/\354\230\254\353\260\224\353\245\270\352\264\204\355\230\270.js" "b/raejun/\354\230\254\353\260\224\353\245\270\352\264\204\355\230\270.js" new file mode 100644 index 0000000..c08896a --- /dev/null +++ "b/raejun/\354\230\254\353\260\224\353\245\270\352\264\204\355\230\270.js" @@ -0,0 +1,32 @@ +function solution(s) { + let score = 0; + let index = 0; + + if (s[0] === ")") return false; + + while (s.length > index) { + if (s[index] === "(") score++; + else score--; + + if (score < 0) return false; + + index++; + } + + return score === 0 ? true : false; +} + +/* +풀이 시간: 9분 + +시간 복잡도는 O(n)이다. +공간 복잡도는 O(1)이다. + +문자열을 순회하면서, "("가 나오면 score를 1 증가시키고, ")"가 나오면 score를 1 감소시켰다. +만약 score가 음수가 되는 경우에는 false를 반환했다. +문자열을 모두 순회한 후에는 score가 0인지 확인해서, 0이면 true를 반환하고, 그렇지 않으면 false를 반환했다. + + +기존에 풀이 방법을 암기하고 있어서 쉽게 떠올릴 수 있었다. +보통 stack을 이용해서 풀이하는 방법이 있지만, 효율성 면에서 score를 이용해서 풀이하는 방법이 더 좋은 것 같다. +*/ diff --git "a/raejun/\354\265\234\353\214\223\352\260\222\352\263\274\354\265\234\354\206\237\352\260\222.js" "b/raejun/\354\265\234\353\214\223\352\260\222\352\263\274\354\265\234\354\206\237\352\260\222.js" new file mode 100644 index 0000000..bcc810a --- /dev/null +++ "b/raejun/\354\265\234\353\214\223\352\260\222\352\263\274\354\265\234\354\206\237\352\260\222.js" @@ -0,0 +1,22 @@ +function solution(s) { + const arr = s.split(" ").map((n) => Number(n)); + const min = Math.min(...arr); + const max = Math.max(...arr); + + return min.toString() + " " + max.toString(); +} + +/* +풀이 시간: 7분 + +시간 복잡도는 O(n)이다. +공간 복잡도는 O(n)이다. + +문자열을 공백으로 분리해서 배열로 만들고, 배열의 요소들을 숫자로 변환했다. +그 다음에, Math.min과 Math.max를 사용해서 배열에서 최솟값과 최댓값을 구했다. +마지막으로, 최솟값과 최댓값을 문자열로 변환해서 공백으로 연결해서 반환했다. + +정답률이 높은 순으로 풀다 보니 초반 문제는 쉽게 풀 수 있을 것 같다. +후반으로 갈수록 점점 더 어려워질 텐데 걱정이다. +쉬운 문제와 어려운 문제를 섞어서 풀어야 할지 고민이 된다. +*/