JavaScript 썸네일형 리스트형 사용자가 입력한 대로 반복해서 별을 출력해주는 알고리즘 (내가한 버전) 간단한 알고리즘 문제를 풀어 봤다. 문제는 아래 링크 참조 바란다. https://school.programmers.co.kr/learn/courses/30/lessons/12969?language=javascript 이전에 같은 문제를 포스팅한 적이 있다. 이번 포스팅에서는 나름대로 내가 풀어 봤다. 인터넷 내용은 50% 정도 훑어보았다. 답안을 뇌에 50%정도 흘려 주었다고 할 수 있겠다. 답안 보기 싫다고 구글링을 안할 수도 없고 기억을 삭제할 수도 없는 일이다. 바로 나의 답안을 올려 본다. 이쯤 주석처리를 하면 언제든 다시 볼 수 있을 것 같다. 반복문 중첩되니 쪼금 들여다 볼 필요는 있다. process.stdin.setEncoding('utf8'); process.stdin.on('data'.. 더보기 깊은 복사는 다른 객체를 생성해 낸다고 보아도 되겠다. [JS 문법 종합반 3주차 - 1] 얕은 복사는 중첩된 객체를 얕은 복사하면 문제가 있었다. 관련하여 게시물참조 https://gamunbidev.tistory.com/54 그런 문제를 해결하는 것이 깊은 복사다. 깊은 복사를 하면 복사당한 객체나 복사로 생긴 객체 하나를 수정하면 그 건드린 객체만 바뀐다. (얕은 복사에서는 하나를 수정하면 둘다 바뀌는 문제가 있었다.) 여러 말 할 필요 없이 코드를 보자. var user = { name: 'wonjang', urls: { portfolio: 'http://github.com/abc', blog: 'http://blog.com', facebook: 'http://facebook.com/abc', }, arr: ['a', 'b'] }; // 깊은 복사 var copyObjectDeep = .. 더보기 얕은 복사의 문제점: 중첩된 객체를 복사하면 복사당한 객체는 복사로 생겨난 객체와 동시에 수정된다. [JS문법 종합반 3주차 - 1] 얕은 복사는 문제가 있다. 무엇일까? 중첩된 객체를 얕은 복사를 할 때가 문제이다. 중첩된 객체란 객체 안에 객체가 있는 경우다. 이 중첩된 객체가 복사당하면 복사 결과물인 객체와는 당연히 따로 서로 다른 객체가 되어야 할 것이다. 그런데 그게 안된다. 복사당한 객체를 수정하면 복사결과 객체까지 바뀌어 버린다. 반대로 복사결과 객체를 수정하면 복사당한 객체도 바뀐다. 객체내부의 중첩객체를 수정하면 그렇다. 얕은 복사는 for in 구문을 활용해서 하는데 코드는 아래와 같다. 문제가 있는 코드다. var user = { name: 'wonjang', urls: { portfolio: 'http://github.com/abc', blog: 'http://blog.com', facebook: 'http://f.. 더보기 new Set() 기본개념과 교집합 구하는 메소드 만들기 [JS문법 종합반 2주차 - 3] Set은 수학적 집합의 개념을 표현할 수 있는 문법이다. Set은 고유한 값을 저장하는 자료 구조이다. Set은 값만 저장하며, 키를 저장하지 않는다. Set은 값이 중복되지 않는 유일한 요소로만 구성된다. 같은 값을 두 번 넣는다면 저장되지 않는다. Set을 사용하면 다음과 같은 작업을 수행할 수 있다. 값 추가 및 값 존재여부 확인 값 삭제 모든 값 제거 Set 크기확인 위의 모든 기능들을 정리했고, 교집합 구하는 메소드를 정리해 보았다. 자바스크립트 내장 메소드인 filter()를 사용한다. // Set 두개를 정의한다. const setA = new Set([1, 2, 3, 4, 5]); const setB = new Set([2, 4]); // setA와 setB의 교집합을 구해 보자. cons.. 더보기 new Map() 완전정리 [JS문법 종합반 2주차 - 3] new Map() 기능은 {key-value} pair 를 저장한다. 객체도 그러하지만 new Map()만의 장점을 아래 정리해 본다. 1) key 에 문자열 뿐만 아니라 다양한 값이 올 수 있다. 2) myMap.keys() 와 같은 메소드로 iterator를 리턴받을 수 있으며 이 iterator는 이름만큼이나 반복문에 집어넣어 돌리기에 적합하다. 코드와 주석(!) 을 보자. const myMap = new Map(); // Map 하나를 새로 만든다. myMap.set('one', 1) // key-value pair 를 만든다. myMap.set('two', 2) myMap.set('three', 3) console.log(myMap.keys()) // key들의 iterator가 출력된다. fo.. 더보기 prompt() 메소드 [혼공자 확인문제 2-3-5] prompt() 메소드는 사용자가에게 입력창을 하나 alert처럼 열어주고 거기 입력받은 값을 메소드명에 할당한다. 코드를 보자. // 달러 수를 입력받습니다. 입력받은 숫자는 rawInput에 들어갑니다. const rawInput = prompt('달러 단위의 금액을 입력해주세요.') // 입력받은 데이터를 숫자형으로 변경하고 won 단위로 변경합니다. const dollar = Number(rawInput) const won = dollar * 1207 // 출력합니다. alert(`달러: ${dollar},\n원화 : ${won}`) 이렇게 전개된다. 더 이상의 자세한 설명은 생략해도 되겠다. 더보기 const로 상수를 만들면 바로 값을 지정해야 한다 [혼공자 확인문제 2-2-3] 아래 코드는 문제 없이 콘솔창에 출력된다. 변수 r 을 선언한 후 r에 10이라는 값을 부여했다. 하지만 아래 코드는 오류를 발생시킨다. const r 로 상수를 선언하면서 값을 바로 지정하지 않고 그 다음줄로 넘어갔기 때문이다. 상수는 변하지 않는 수이므로 아래처럼 값을 나중에 따로 지정하는 것이 아니라 선언할 때 즉시 정한다. 따라서 아래에서는 첫줄의 r 에서부터 빨간줄이 쳐질 것이다. 해결방법이야 간단하다. const r = 10 이렇게 고치면 된다. 더보기 증감연산자 ++num 등 [혼공자 확인문제 2-2-4] ++number 과 number--등 특이한 증감연산자가 많다. 간단히 한번 정리해 본다. 아래 코드의 콘솔창 결과를 예상해 보자. 정답은 11 11 13 13 이다. 더보기 이전 1 2 3 다음