JS 코드카타
로마자에서 숫자로 바꾸기
1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.
로마 숫자를 숫자로 표기하면 다음과 같습니다.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다.
III = 3
XII = 12
XXVII = 27
입니다.
그런데 4를 표현할 때는 IIII가 아니라 IV 입니다.
뒤의 숫자에서 앞의 숫자를 빼주면 됩니다.
9는 IX입니다.
I는 V와 X앞에 와서 4, 9
X는 L, C앞에 와서 40, 90
C는 D, M앞에 와서 400, 900
function romanToNum(s) {
let matching = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
}
let strArr = s.split('');
let numArr = strArr.map(el => matching[el]);
let sum = 0;
for (let i = 0; i < numArr.length; i++) {
if (numArr[i] < numArr[i+1]) {
sum += (numArr[i+1] - numArr[i]);
i++;
} else {
sum += numArr[i];
}
}
return sum;
}
숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
function moreThanHalf(nums) {
for(let i = 0; i < nums.length; i++){
let count = 0;
for(let j = i; j < nums.length; j++){
if(nums[i] === nums[j]){
count += 1;
}
if( count > nums.length / 2 ){
return nums[j];
}
}
}
}
moreThanHalf([1,1,2,2])
s는 여러 괄호들로 이루어진 String 인자입니다.
s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다.
아래의 경우 유효합니다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다.
괄호 순서가 맞아야 한다.
function isValid(s) {
// 미해결......;;;;;
}
nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
function topK(nums, k) {
const count = {};
result = [];
nums.forEach((el)=> {count[el] = (count[el]) ? ++count[el] : 1});
let mostUsedKey = (obj) => {
let res = Object.keys(obj).reduce((pre, cur) => count[pre] > count[cur] ? pre : cur);
return res;
}
for (let i=0; i<k; i++) {
result.push(parseInt(mostUsedKey(count)));
delete count[parseInt(mostUsedKey(count))];
}
return result;
}
인자인 height는 숫자로 이루어진 배열입니다.
그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고,
물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
function getMaxArea(height) {
let result = 0;
for(let i=0; i<height.length; i++){
for(let j=i+1; j<height.length; j++){
result = Math.max((Math.min(height[i],height[j]) * (j-i)), result);
}
}
return result;
}