전체 글 118

치욕스런 날코딩, 정규표현식 배워야겠다는 다짐

프로그래머스 | level 1 | Python | 신규 아이디 추천 문제 링크 def solution(new_id): new_id = new_id.lower() new_id = validateAllLetters(new_id) new_id = removeDubleDot(new_id) new_id = removeDotOfFrontAndRear(new_id) new_id = handleEmptyId(new_id) new_id = handleLongId(new_id) new_id = handleShortId(new_id) return new_id def validateAllLetters(id): new_id = "" for letter in id: if letter.isalpha() or letter.isdig..

레벨 1 문제에서 찾은 작은 교훈

프로그래머스 | level 1 | Python | 내적 나의 풀이 def solution(a, b): answer = 0 while a and b: answer += a.pop() * b.pop() return answer 처음 문제를 읽다가 내적에 링크가 걸려 있길래 들어갔더니 영어 위키 문서였다. 그래서 찬찬히 읽으려다가 수학 용어가 나오길래 바~로 한국어 문서를 찾았다.그랬더니 더욱 깊숙한 지식의 늪에 빠졌고 내 속에선 프로그래머스에 대한 배신감과 level 1 문제에서 조차 이렇게 고전하는 자신의 무력감 또한 느껴졌다. 하지만 알고보니 무척 쉬웠던 문제. 그냥 길이(심지어 길이가 같다고!)가 같은 리스트의 요소를 순서대로(심지어 순서대로!) 곱해서 합하면 끝이다. 허무하게 (몸 곳곳에 내적 개념이..

프로그래머스 | level 1 | python | 3진법 뒤집기

프로그래머스 | level 1 | python | 3진법 뒤집기 나의 풀이 def solution(n): answer = [] while n != 0: # 3진법 적용하여 거꾸로 표현 remainder = n % 3 # 나머지 if remainder == 0: answer.append(0) else: answer.append(remainder) n = n // 3 base = 1 # 밑 sum = 0 while answer: sum += answer.pop() * base base *= 3 return sum 3진법을 다루는 간단한 문제이다. 다시 알고리즘 문제를 풀며 실력을 끌어올리리라, 다짐하며 시작했다. 안 풀어 봤던 level 1 문제를 발견해 풀었다. 편리한 언어의 대명사 파이썬이라 3진법 만드..

자바스크립트에서 '없음'을 나타내는 두 가지 방법, undefined와 null

자바스크립트에서 '없음'을 나타내는 두 가지 방법, undefined와 null undefined를 반환하는 상황 3가지 자바스크립트 엔진은 사용자가 응당 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로는 그렇게 하지 않았을 때 undefined를 반환합니다. 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때 var a; console.log(a); // undefiend. 값을 대입하지 않는 변수에 접근 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때 var obj = { a: 1}; console.log(obj.b); // ReferenceError: b is not defined 존재하지 않는 프로퍼티에 접근 return 문이 없..

Javascript Koans가 뭐야? 설명과 테스트 후기

Javascript Koans 설명과 테스트 후기 바닐라코딩 사전 학습 가이드의 5번째 단계로 Javascript Koans가 있다. 처음 봤을 때는 무려 10년 전 깃허브 레포지토리의 자료라서 당황스러웠고, 다 영어라서 꺼려졌다. koans가 뭐야? 큰 스님들이 제자들을 인도하던 사실을 기록하여 후세에 공부하는 규범 일단, 이걸로 뭘 하라는 건지 알 수 없었다. 제목에 떡하니 있는 koans라는 단어의 뜻이 매우 궁금해졌다. 그래서 찾아봤더니 ... koans의 koan은 공안(公案)으로, '간화선'이라는 불교 수행법 안의 개념이다. 공안은 공부안독의 준말로, 관공서(官公署)의 문서라는 뜻인데, 선종의 큰 스님들이 심지, 즉 마음자리를 밝게 깨달은 기연 또는 큰 스님들이 제자들을 인도하던 사실을 기록하..

[Javascript] 프로토타입으로 클래스 구현하기

프로토타입으로 클래스 구현하기 자바스크립트에는 '상속' 개념이 존재하지 않습니다. 하지만 클래스 기반의 다른 언어에 익숙한 개발자들의 니즈에 따라 ES6에는 클래스 문법이 추가됐습니다. 하지만 ES6 클래스에서 일정 부분은 프로토타입을 활용하고 있기 때문에, ES5 체제 하에서 클래스를 흉내내기 위한 구현 방식을 학습하는 것은 큰 의미가 있습니다. 클래스와 인스턴스의 개념 이해 상위의 개념과 하위의 개념이 있습니다. 개념을 어떤 '집단'으로 표현하면, 영어로 그것은 클래스라고도 할 수 있습니다. 다시 말해, 상위 클래스와 하위 클래스가 있습니다. 하위 클래스는 상위 클래스를 포함하면서 더 구체적인 내용(개념)이 추가됩니다. 여기서 클래스의 예는 '음식'이고 그 하위 개념(클래스)는 '과일'이며, 또 그 ..

[Javascript] 함수 선언문 vs. 함수 표현식 feat 호이스팅

함수 선언문과 함수 표현식 함수 선언문(function declaration)은 function의 정의부만 존재하고 별도의 할당 명령이 없는 것을 의미합니다. function a() { // 함수 선언문 /* ... */ } a(); // 정상 실행 함수명 a가 곧 변수명입니다. 함수 선언문의 경우 반드시 함수명이 정의되어 있어야 합니다. 반대로 함수 표현식(function expression)은 정의한 function을 별도의 변수에 할당하는 것을 말합니다. var b = function () { // (익명) 함수 표현식. 변수명 b가 곧 함수명 /* ... */ } b(); // 정상 실행 var c = function d () { // 기명 함수 표현식. 변수명은 c, 함수명은 d /* ... *..

[Javascript] 프로토타입 찬찬히 이해해보기

자바스크립트의 근본, 프로토타입... 바~rrㄹ로 시작! 프로토타입의 개념 이해 constructor, prototype, instance var instance = new Constructor(); 어떤 생성자 함수(Constructor)를 new 연산자와 함께 호출하면 Constructor에서 정의된 내용을 바탕으로 새로운 인스턴스(instance)가 생성됩니다. 이때 instance에는 __proto__ 라는 프로퍼티가 자동으로 부여됩니다. 이 프로퍼티는 Constructor의 prototype이라는 프로퍼티를 참조합니다. prototype 객체 내부에는 인스턴스가 사용할 메서드를 저장합니다. 그러면 인스턴스에서도 숨겨진 프로퍼티인 __proto__ 를 통해 이 메서드들에 접근할 수 있게 됩니다. ..

클로저는 글로 적기 글렀어.

클로저, 글로 적어 보자 클로저의 의미 및 원리 이해 예제로 시작해봅시다. var outer = function () { var a = 1; var inner = function () { return ++a; }; return inner; }; var outer2 = outer(); console.log(outer2()); console.log(outer2()); /* 실행결과 2 3 */ 함수 outer은 inner 함수 자체를 반환합니다. 변수 outer2에는 outer의 반환 값이 담깁니다. 그리고 outer2를 두 번 호출해 출력합니다. 실행 결과는 2와 3입니다. 기존 상식으로 콘솔 출력 결과가 나오기까지 과정을 생각해보면 다음과 같습니다. (9번째 줄) outer2를 호출합니다(outer2에는..

허브의 기능(증폭과 연결)과 문제(플러딩으로 인한 도메인 충돌 가능성)

허브의 기능과 문제 배경지식 케이블에 T자 분배를 만드는 대신, 케이블을 허브에다 연결하면 케이블이 분배되는 것과 마찬가지이다. 허브에 케이블로 연결되어 있는 기기는 동일 케이블에 연결되어 있는 것하고 같은 취급을 받는다. 허브의 기능 신호의 증폭하고 재생합니다. 감쇠에 의해 붕괴된 신호를 본래의 형태로 증폭, 재생시킵니다. 증폭만 하는 기계로, 리피터(Repeater)라는 것이 있습니다. 리피터는 케이블 사이에 연결하는 기계로 허브처럼 케이블을 많이 연결할 수 없습니다. 그래서 케이블을 많이 연결할 수 있는 허브 쪽이 일반적으로 사용됩니다. 신호를 증폭하고 재생하지 않는 허브도 존재합니다. 그런 허브는 패시브(passive) 허브라고 불립니다. 패시브 허브는 신호를 증폭시키지 않고 통과시키는 허브입니다..