diff --git "a/raejun/\354\235\264\354\247\204\353\263\200\355\231\230\353\260\230\353\263\265\355\225\230\352\270\260.js" "b/raejun/\354\235\264\354\247\204\353\263\200\355\231\230\353\260\230\353\263\265\355\225\230\352\270\260.js" new file mode 100644 index 0000000..10d5be8 --- /dev/null +++ "b/raejun/\354\235\264\354\247\204\353\263\200\355\231\230\353\260\230\353\263\265\355\225\230\352\270\260.js" @@ -0,0 +1,34 @@ +function solution(s) { + let zero = 0; + let count = 0; + + while (s !== "1") { + const len = s.length; + + s = s.replaceAll("0", ""); + + const oneCount = s.length; + + s = oneCount.toString(2); + + zero += len - oneCount; + count++; + } + + return [count, zero]; +} + +/* +풀이 시간: 10분 + +시간 복잡도는 O(n log n)이다. +공간 복잡도는 O(1)이다. + +문자열 s가 "1"이 될 때까지 반복하면서, 문자열 s에서 "0"을 제거하고, 남은 "1"의 개수를 구했다. +그 다음에, "1"의 개수를 이진수 문자열로 변환했다. +반복할 때마다 제거한 "0"의 개수를 zero에 더했고, 반복한 횟수를 count에 더했다. +문자열 s가 "1"이 되면, [count, zero]를 반환했다. + +문제에서 요구사항을 그대로 구현하면 되는 문제였다. +문자열 메서드를 오랜만에 사용해서 조금 헷갈렸다. +*/ diff --git "a/raejun/\354\265\234\354\206\237\352\260\222\353\247\214\353\223\244\352\270\260.js" "b/raejun/\354\265\234\354\206\237\352\260\222\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..ace3101 --- /dev/null +++ "b/raejun/\354\265\234\354\206\237\352\260\222\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,25 @@ +function solution(A, B) { + var answer = 0; + + A.sort((a, b) => a - b); + B.sort((a, b) => b - a); + + for (let i = 0; i < A.length; i++) { + answer += A[i] * B[i]; + } + + return answer; +} + +/* +풀이 시간: 4분 + +시간 복잡도는 O(n log n)이다. +공간 복잡도는 O(1)이다. + +배열 A는 오름차순으로 정렬하고, 배열 B는 내림차순으로 정렬했다. +그 다음에, 배열 A와 배열 B의 요소들을 순회하면서, 각 요소들을 곱해서 answer에 더했다. + +눈치껏 최솟값과 최댓값을 곱하는 방식으로 풀이했다. +근데 왜 그게 최솟값이 되는지는 잘 모르겠다. +*/