CODEKATA Day 2 [JS] - Leetcode - 1108, 1, 7
1. 1108 - Defanging an IP address
Given a valid (IPv4) IP address
, return a defanged version of that IP address. A defanged IP address replaces every period "."
with "[.]"
.
예시 1
Input: address = "1.1.1.1"
Output: "1[.]1[.]1[.]1"
예시 2
Input: address = "255.100.50.0"
Output: "255[.]100[.]50[.]0"
이번에도 난이도 easy의 문제로 예시만 보더라도 바로 파악이 되실거라고 생각됩니다. ip주소에서 .을 []로 대체하는 방법을 묻고 있습니다.
내 답변
var defangIPaddr = function (add) {
let splitNums = add;
let result = "";
const arr = [];
for (i = 0; i < splitNums.length; i++) {
if (splitNums[i] === ".") {
arr.push(i);
}
}
return (
splitNums.substring(0, arr[0]) +
"[" +
splitNums[arr[0]] +
"]" +
splitNums.substring(arr[0] + 1, arr[1]) +
"[" +
splitNums[arr[0]] +
"]" +
splitNums.substring(arr[1] + 1, arr[2]) +
"[" +
splitNums[arr[0]] +
"]" +
splitNums.substring(arr[2] + 1, arr[3])
);
};
첫 답변은 굉장히 지저분했습니다. String.prototype.method를 이용하려고 고집하다가 대참사가 발생한 것이죠. 특히 return 값을 저렇게 길게 나열하면서 스스로 정말 나쁜 코드를 만들었구나.. 하면서 반성했습니다.
보완 답변
var defangIPaddr = function (add) {
let ans = "";
for (i = 0; i < add.length; i++) {
console.log(add[i]);
if (add[i] === ".") {
ans += "[";
ans += ".";
ans += "]";
} else {
ans += add[i];
}
}
return ans;
};
다른 언어로 푸신분의 답변을 보완 답변으로 재작성 해보았습니다. 복잡하게 문자열 메서드를 사용하기 보다, 단순하게 for 문으로 쓰는 것이 더 간결해 보입니다.
2. 1 - Two Sum
Given an array of integers nums
and an integer target
, return indices of the two numbers such that they add up to target
. You may assume that each input would have *exactly* one solution, and you may not use the same element twice. You can return the answer in any order.
예시 1
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].
예시 2
Input: nums = [3,2,4], target = 6
Output: [1,2]
예시 3
Input: nums = [3,3], target = 6
Output: [0,1]
내 답변
var twoSum = function (n, t) {
const arr = n;
const arrLength = arr.length;
const target = t;
const result = [];
for (i = 0; i < arrLength; i++) {
for (j = 0; j < arrLength; j++) {
if (arr[i] + arr[j] === target && i !== j) {
result.push(i);
}
}
}
return result;
};
우수 답변
const twoSum = (nums, target) => {
const map = {};
for (let i = 0; i < nums.length; i++) {
const another = target - nums[i];
if (another in map) {
return [map[another], i];
}
map[nums[i]] = i;
}
return null;
};
3. 7 - Reverse Integer
Given a signed 32-bit integer x
, return x
with its digits reversed. If reversing x
causes the value to go outside the signed 32-bit integer range [-231, 231 - 1]
, then return 0
.Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
예시 1
Input: x = 123
Output: 321
예시 2
Input: x = -123
Output: -321
예시 3
Input: x = 120
Output: 21
예시 4
Input: x = 0
Output: 0
내 답변
var reverse = function (x) {
const absReverse = Math.abs(x).toString().split("").reverse().join("");
if (absReverse > 2 ** 31) return 0;
return absReverse * Math.sign(x);
};