첫번째 문제
: JS를 통해 로마자를 숫자로 바꾸는 법
function romanToNum(s) {
const Roma = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
let num = 0; //Number형을 담을 것
for (let i=0; i<s.length; i++){ //i가 0이고 s에 담긴 길이보다 작을 때 까지 반복
if ((i===0)){
num += Roma[s[i]]; //Roma의 키에 해당하는 value를 넣는다. 배열에 하나의 값만 존재할 때
}
else if ((Roma[s[i]] <= Roma[s[i-1]])){ //C가 M보다 작거나 같으면
num += Roma[s[i]]; //C와 M을 더 해준다.
}
else { //M이 X보다 크면
num += (Roma[s[i]] - 2 * Roma [s[i-1]]); //M에 *2한 값을 X에서 빼준다.
}
}
return num;
}
romanToNum("MCMXCIV");
두번째 문제
: 숫자가 든 배열이 있을 때 안에 들어있는 특정수가 과반수를 넘으면 return
function moreThanHalf(nums) {
count = {}
if (nums.length == 1) return nums[0];
for(let i=0; i<nums.length; i++){
if(count[nums[i]] !== undefined) { //value가 undefined이면
console.log(count)
//count[nums[i]] 얘는 value이다.
count[nums[i]] += 1 //value에 +1을 해준다.
if (count[nums[i]] > nums.length/2) { //value가 과반수를 넘으면
**r**eturn nums[i] //value를 return
}
} else{
count[nums[i]] = 1 //키nums[i]와 벨류값을 한번에 정의하는 것, value의 값 = 1
}
}
}
moreThanHalf([1,2,3,1,2,3,2,3,3,3,3,3,3,3,3,3]);
array가 아닌 배열을 사용해서 키와 벨류값을 가지고 더 긴 값을 구한다. .length로 비교하는 것이 아니라 갯수를 하나씩 비교를 해서 오브젝트에 든 키와 동일한 값이 있다면 value를 +1해주는 형식으로 진행하였다.
arr = [1, 1, 2, 3, 2, 3, 3] 이면 과반수를 어떻게 구하는거지? → 이 arr배열은 과반수가 존재하지 않으니 null해주기
//아래는 내가 작성했던 코드 문제는 배열로 접근했다.
function moreThanHalf(nums) {
const numSort = nums.sort(
if(nums.length === 0){
return ""
}
for(let i=0; i<nums.length; i++){
if(nums[i] !== nums[i+1]){
// const leng = numSort.slice(nums[i+1], nums[nums.length-1])
const leng = numSort.slice(i+1, undefined);
const fristLeng = numSort.slice(0, i+1);
if(fristLeng.length<leng.length){
return leng.length;
}else{
return fristLeng.length;
}
}
}
}
moreThanHalf([1,2,3,1,2,3,2,3,3,3,3,3,3,3,3,3]);
이 코드를 작성하면서 생각했던 코드의 한계점, 내가 다루는 것은 두개의 값만을 비교할 수 있다는 것. 한계를 알면서도 이 코드를 작성한 이유는, 뭔가 해보면 어떻게 발전해야할지 알 수 있지않을까? 라는 생각을 했기에
for in / for of 반복문
for of and for in 루프는 문자열, 배열 및 객체 리터럴과 같은 모든 종류를 반복이 가능하며 열거 항목을 반복하는 매우 깨끗하고 간결한 구문을 제공한다.
선언문의 모든 목록을 반복한다. 반복되는 값은 다르지만 for in은 반복되는 객체의 key목록을 반환하고, 반복되는 객체 for of는 숫자 속성 값 목록을 반환한다.
for in
열거 가능한 객체의 속성 이름을 반복.
for of
객체 별 반복자를 사용하고 그에 의해 생성된 값을 반복한다.
const array1 = ['a', 'b', 'c'];
for(const element of array1){
console.log(element); //'a' 'b' 'c' array내부의 값 반환
}
for(const element in array1){
console.log(element); //'0' '1' '2' index반환.
}
for(반복 할 때마다 다른 속성 **값**에 할당 of 반복 가능한 속성, 반복되는 객체)
for(반복 할 때 마다 다른 속성이 **변수**에 할당 in object)
댓글