본문 바로가기

전체 글

(19)
자바스크립트 변수 호이스팅 변수 호이스팅(hoisting)이란? 자바스크립트에서 변수 선언문이 코드의 가장 위쪽으로 끌어올려진 것처럼 동작하는 것 hoist : 끌어올리다 예시 1 console.log(foo) // undefined var foo 자바스크립트는 변수 선언과 동시에 undefined를 할당한다. foo라는 변수가 런타임 이전에 먼저 선언 및 undefined로 초기화되어, 위 코드는 에러가 발생하지 않고 undefined를 출력한다. 예시 2 console.log(foo) // undefined var foo = 3 // var foo; foo = 3; console.log(foo) // 3 이 경우에는 각각 undefined, 3을 출력한다. var foo = 3; 은 var foo; foo = 3;을 단축해서 ..
JavaScript Closure 외부함수의 실행이 끝나고 소멸된 후에도, 내부함수에서 외부함수의 변수에 접근할 수 있는 것이다. function f() { var a = []; var i; for (i = 0; i < 3; i++) { a[i] = function() { return i; }; } return a; } var a = f(); console.log(a[0]()); console.log(a[1]()); console.log(a[2]()); 위 코드는 0, 1, 2가 아닌 3, 3, 3을 출력한다. 실행 과정이다. 1. f 함수 안에서 for문을 돌며 a[i] 에 함수를 아래와 같은 형태로 저장한다. a[i] = function() { return i; } 2. for문이 끝난 시점에 i는 3이고, f는 a를 리턴하고 종료된..
Spring Qualifier Annotation @Qualifier는 스프링이 어떤 bean을 주입해야 하는지 지정해준다. 예를 들어, 같은 타입의 이름만 다른 bean을 두 개 생성했다. @Configuration public class AppCtx { /// 생략 /// @Bean public MemberPrinter memberPrinter1() { return new MemberPrinter(); } @Bean public MemberPrinter memberPrinter2() { return new MemberPrinter(); } /// 생략 /// } MemberPrinter 타입의 bean을 주입받아야 하는 MemberInfoPrinter 클래스다. public class MemberInfoPrinter { MemberPrinter me..
Spring Import Annotation 하나의 설정 클래스에서 다른 설정 클래스를 추가하는 방법이다. 설정 클래스들을 그룹지을 수 있어 편리해진다. 예를 들어, 설정 파일 AppConf1, AppConf2가 있다고 하자. @Configuration public class AppConf1 { @Bean public MemberDao memberDao() { return new MemberDao(); } @Bean public MemberPrinter memberPrinter() { return new MemberPrinter(); } } @Configuration public class AppConf2 { @Bean public MemberInfoPrinter memberInfoPrinter() { return new MemberInfoPrin..
HackerRank Challenges 문제 이해 Hackers, Challenges 테이블에서 해커 아이디, 이름, 만든 문제 수를 가져와야 한다. 이 때, 문제 수의 내림차순으로 정렬하고, 문제 수가 같다면 해커 아이디의 오름차순으로 정렬한다. 만약 만든 문제 수가 최대가 아니면서 두 명 이상이 같은 수의 문제를 만들었을 경우 결과에서 제외한다. 예를 들어, A가 7개, B가 6개, C가 6개, D가 7개의 문제를 만들었다고 하자. 최대 문제 수는 7인데, B와 C가 똑같이 6개씩 문제를 만들었다. 이 경우 B와 C를 결과에서 제외한다는 뜻이다. A와 D는 최대 문제 수인 7개를 만들었으므로 둘 다 결과에 포함한다. hacker_id : 해커의 아이디 name : 해커의 이름 challenge_id : 문제의 아이디 hacker_id : ..
백준 2564번 경비원 문제 이해 블록의 가장자리로만 이동이 가능할 때, 동근이와 각 상점까지의 최소 거리의 합을 구하는 문제다. 위의 그림에서 동근이는 X, 상점은 1, 2, 3이다. 상점 1까지의 최소 거리는 12, 2까지는 6, 3까지는 5이고 그 합은 23이다. 풀이 설명 동근이가 있는 면을 기준으로 왼쪽이나 오른쪽 면에 있는 상점들까지의 최소 거리는 각각 왼쪽으로 가는 길, 오른쪽으로 가는 길이다. 하지만 반대편에 있는 상점은 동근이를 기준으로 왼쪽으로 도는것과 오른쪽으로 도는 것 중 하나가 최소 거리다. 입력은 동서남북을 각각 4, 3, 2, 1로, 해당하는 면에서 상점의 위치는 가로면은 왼쪽부터, 세로면은 위쪽부터의 거리로 주어진다. 그렇기 때문에 동근이가 어떤 면에 있느냐에 따라 계산 식이 달라진다. 하지만 위의..
HackerRank Ollivander's Inventory 문제 이해 론은 새로운 지팡이를 사려고 한다. 같은 power와 age라면, 그 중 가장 저렴한 지팡이를 고르는 것이 좋은 선택이다. 아래의 두 테이블 Wands와 Wands_Property를 사용해서 그러한 지팡이들의 id, age, coins_needed, power를 가져와야 한다. 이 때, power의 내림차순으로 정렬하고, power가 같은 경우에는 age의 내림차순으로 정렬한다. id : 지팡이의 id code : 지팡이의 코드 coins_needed : 지팡이를 사는 데 필요한 골드 갤런 power : 지팡이의 퀄리티. power가 높을수록 더 좋은 지팡이. code : 지팡이의 코드 age : 지팡이의 age is_evil : 지팡이가 어둠의 마법에 좋은지 여부. 0이면 not evil이다..
백준 5014번 스타트링크 문제 이해 총 F층으로 이루어진 건물의 G층에 스타트링크가 위치한다. 강호는 현재 S층에서 G층으로 이동하려 한다. 엘리베이터는 위로 U층 올라가는 버튼, 아래로 D층 내려가는 버튼 두 가지다. 강호가 G층에 도착하기 위해 눌러야 하는 버튼의 수의 최솟값을 출력한다. 만약 엘리베이터로 G층까지 이동할 수 없다면 "use the stairs"를 출력한다. 풀이 설명 step이라는 배열을 두고, step[s]부터 시작해서 위, 아래로 이동하며 step[n]에 n층까지 이동하는 데 눌러야 할 최소 버튼 수를 저장하는 방법을 사용했다. 해결 방법은 다음과 같다. 1. F의 최댓값인 1,000,000 + 1 크기로 step 배열을 두고, -1로 초기화한다. 2. step[S]에 0을 저장하고 (S는 강호가 이동을..