네이버 부스트코스에서 CS50 강의를 같이 스터디할 수 있다길래 냉큼 신청해보았다. 사실 그 전에도 edWith에서 CS50 강의를 신청해서 들으려고 시도했었는데 강의하시는 교수님이 엄청 말이 빠르시고 영어인데 자막이 없어서, 사실 좀 듣기 어려웠다. 그래서 중간에 흐지부지 되었었는데, 마침 부스트코스에서 CS50 강의에 한글 자막도 제공하고 다른 사람들이랑 같이 진도를 나갈 수 있다고 신청했다. 스터디 과정 일단 이 스터디를 신청할 때 무료 스터디라 그런지 나름 적어야 하는 양식이 있었다. 지원 동기 관련한 질문이나 퀴즈 같은 것도 있었다. 폼을 작성한 사람이 모두 선발된 것인지 아니면 너무 성의없는 사람은 걸러졌는지는 모르겠으나, 일단 선정이 되면 '부스터'라는 이름으로 스터디에 참여하..
현상 패키지 매니저는 yarn 사용 중, apollo 버전 ^2.30.1, graphql 버전 ^15.3.0 apollo client로 codegen 하는 스크립트를 실행하였더니, graphql 인스턴스가 중복됐다는 에러가 나온다. Error: Cannot use GraphQLSchema "[object GraphQLSchema]" from another module or realm. Ensure that there is only one instance of "graphql" in the node_modules directory. If different versions of "graphql" are the dependencies of other relied on modules, use "resolutio..
프로젝트를 할 때 라이브러리를 포함한 외부 패키지를 갖다 쓰는 것은 흔한 일이다. 이미 만들어져있는 코드를 가져다가 사용만 하는 것이기 때문에, 프로젝트가 이 외부 패키지들에게 '의존하고 있다'고 표현해도 될 것이다. 프로젝트가 의존하고 있는 패키지들의 목록이 열거된 파일이 package.json이며, 이 파일의 dependencies 라는 객체에 패키지명과 미니멈 버전들이 나열돼 있다. Semantic Versioning 예시를 들어보자. "dependencies": { "graphql": "^15.3.0" } package.json 파일에 위처럼 써있다면 이 프로젝트는 graphql 패키지에 의존하고 있음을 나타내는 것이다. 그리고 graphql 패키지의 버전은 ^15.3.0 이라고 쓰여있는데, 이 ..
먼저 노드를 구현한다. C에서 구조체(struct)로 node를 정의할 수 있다. 배열처럼 인접한 셀들의 메모리 chunk가 아니라, 떨어진 메모리를 연결하는 것이기 때문에 자신의 값과 다음 노드의 주소를 가리키는 값(포인터)을 가지고 있어야 한다. 이 구조체를 node라고 한다면 다음 노드의 주소를 가리키는 next라는 포인터 변수는 node 타입을 값으로 갖고 있으므로 node *로 선언한다. 그러면 아래처럼 node라는 struct를 구성할 수 있을 것 같다. 하지만 여기서 하나 문제는, 맨 마지막 줄을 읽을 때까지 C는 여기에 node라는 struct가 있음을 알지 못하는데, 이미 그 전에 node *next 를 선언한다는 것이다. typedef struct { int number; node *n..
풀이 def accumulator(index, target_DNA, DNA_mapper): for DNA in DNA_mapper: if target_DNA == DNA: DNA_mapper[target_DNA][index + 1] = DNA_mapper[target_DNA][index] + 1 else: DNA_mapper[DNA][index + 1] = DNA_mapper[DNA][index] def get_minumum_impact_factor(start_index, end_index, DNA_mapper): for DNA in DNA_mapper: if DNA_mapper[DNA][end_index + 1] - DNA_mapper[DNA][start_index] > 0: return DNA els..
Prefix Sums array의 어떠한 slice라도 sum을 빠르게 계산할 수 있도록 해주는 방법이다. 예를 들어 어떤 배열의 인덱스 i부터 j까지의 합을 구하려고 할 때 for문을 써서 일일이 접근해서 더하면 O(N)이지만, 이 방법을 사용하면 O(1)이다. def prefix_sums(A): n = len(A) P = [0] * (n + 1) for i in range(1, n + 1): P[i] = P[i - 1] + A[i - 1] return P 점화식: P[i] = P[i - 1] + A[i - 1] A라는 배열이 있을 때, A 배열의 sum의 누적값을 계산해서 P에 넣는 것이다. P[i] = P[i - 1] + A[i - 1]으로 계산되고, P[i]는 A 배열의 i번째 원소(인덱스로는 i..
문제 상황 material-ui의 drawer 컴포넌트를 사용하고 있음 부모 컴포넌트(검색 결과를 리스트로 보여주는 페이지)가 자식 컴포넌트인 drawer에게 state(인원 수)를 넘겨줌. drawer는 부모 컴포넌트로부터 받은 인원 수로 state를 초기화하고, drawer내에서 인원 수를 변동시킬 수 있음. drawer 내에서 인원 수를 변동시킨 다음 저장 버튼을 누르면 drawer가 닫히면서 바뀐 인원 수로 검색 api 재호출하여 그 결과를 부모 컴포넌트인 리스트 페이지에 렌더링함. 그런데 문제는 api call이 백그라운드에서 진행되고 있을 때, drawer를 열어서 인원 수를 조작하고 있는 상황에서, api 호출이 끝나고 리스트가 렌더링되면, drawer에서 조작하고 있던 인원 수가 다시 초기..
부모 컴포넌트에서 count라는 state를 갖고 있고 이를 prop를 내려줄 때, 자식 컴포넌트에서 이를 받아 state의 초기값으로 삼았다고 하자. 이후, 부모 컴포넌트에서 갖고 있는 count 값이 변동된다면 자식 컴포넌트가 표시하고 있는 state는 어떻게 될까? 변하지 않는다. 그 이유는 컴포넌트 생성자(constructer)는 컴포넌트가 마운트될 때 한 번만 실행되기 때문이다. constructer는 this.state의 초기값 적용, 인스턴스에 이벤트 처리 메서드를 바인딩 하기 위해 사용한다. class ChildComponent extends Component { constructer() { super(props); this.state = { count: this.props.value };..
잘못된 코드 #include void swap(int a, int b); int main(void) { int x = 1; int y = 2; swap(x, y); printf("x: %i, y: %i\n", x, y); // 여전히 x는 1, y는 2 } void swap(int a, int b) { int tmp = a; a = b; b = tmp; } 위 코드는 swap함수 안의 a와 b의 값을 바꾸기는 하지만, main 함수 안에 x와 y는 바꾸지 못한다. 왜냐면 swap함수로 전달되는 값은 복사된 값(pass by value)이기 때문이다. (참고로 C언어는 자바스크립트나 파이썬과 같은 언어와 달리 전부 pass by value로 넘어간다. object랑 비슷하게 생긴 struct도 마찬가지다...
문자열 복사하기 #include #include #include #include int main(void) { char *s = get_string("s: "); // leo char *t = s; t[0] = toupper(t[0]); printf("s: %s\n, s"); // Leo printf("t: %t\n, t"); // Leo } t에 s를 할당하고, t의 첫글자를 uppercase로 바꾸고 난 뒤 t와 s를 출력하면 두 개 모두 첫글자가 대문자로 출력된다. 왜냐하면 t는 s가 갖고 있는 주소를 가리키고 있기 때문이다. 즉 s가 갖는 주소에 있는 값이 변하면, t도 동일한 것을 보고 있으므로 역시 똑같이 변한 값이 출력된다. #include #include #include #include i..
any와 unknown 모두 모든 타입들의 super set이다. 즉 어떤 타입도 any와 unknown에 넣을 수 있다. 하지만 unknown은 자기 자신과 any를 제외한 다른 타입에 할당할 수 없다. (Anything is assignable to unknown but unknown isn't assignable to anything but itself and any) const vAny: any = 10; // any에 어떤 것도 집어넣을 수 있다. const vUnknown: unknown = 10; // any처럼 unknown에도 어떤 것도 집어넣을 수 있다. let s1: string = vAny; // any는 어떤 것에도 집어넣어진다. let s2: string = vUnknown; /..
string s = "LEO"; 사실 c에는 string이라는 자료형이 없다. 그 간 string이라는 자료형은 만들어진 것이며, 이를 사용하기 위해 라이브러리에서 불러온다는 것은 알고 있었다. 그렇다면 string 자료형은 내부적으로 어떻게 구현이 되어있는 것일까? 전에도 언급했듯이 string은 단지 char의 배열이다. 내부적으로 보면 메모리에 L, E, O, \0(널 종단문자) 순서대로 저장되어있을 것이다. 그러면 변수 s는 어떤 값을 저장하고 있는 것인가? 변수 s는 char 배열의 가장 첫 번째 글자인 L이 위치한 메모리 주소를 값으로 갖고 있다. 즉, s는 포인터 변수이다. s는 char 배열의 첫 번째 글자의 주소만 알고 있고, 그 주소에서부터 시작해서 널 종단 문자가 나올 때까지 loop..
현상 Gradle을 brew로 설치한 후, 설치가 잘 되었나 확인해보려고 gradle -v 을 치니 다음과 같은 에러가 출력됨. ERROR: JAVA_HOME is set to an invalid directory: /usr/local/opt/openjdk/bin/java Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 해결(MacOS) 첫 번째로 자바가 설치되어있는지 확인해봄. java --version 치니 openJDK가 설치되어 있다고 나온다. 두 번째로 자바가 어디 설치돼 있는지 확인해봄. which java 로 자바 위치 확인. JAVA_HOME과 자바 설치 ..
16진수 16진수는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 로 숫자를 나타낸다. 0에서 9까지는 10진수와 값이 동일하고, A는 10, B는 11, C는 12, D는 13, E는 14, F는 15를 나타낸다. 즉 16진수에서는 한자리 수로 0에서부터 15까지 표현할 수 있다. 그런데 위에서 보다시피, 0에서부터 9까지는 10진수와 동일한 값이라서 10진수와 헷갈릴 우려가 있다. 그래서 16진수에서는 모든 수 앞에 0x 를 붙인다. 이건 아무런 의미가 없고 그냥 16진수라는 뜻으로 붙인다. 예를 들어 16진수의 0은 0x0 으로 표기한다. 그렇다면 이해를 돕기 위해 2진수를 16진수로 바꾸어보자. 8비트가 나타낼 수 있는 가장 큰 수는 255이다. 2진수로는 1..
히스토리 타입 브라우저 히스토리 해시 히스토리 메모리 히스토리 브라우저 히스토리와 해시 히스토리는 둘 다 브라우저 환경에서 사용된다. 브라우저 히스토리와 해시 히스토리는 현재 location이 브라우저의 주소창에 띄워져있는 것과 일치하도록 한다. const browserHistory = createBrowserHistory() const hashHistory = createHashHistory() 이 두 개의 가장 큰 차이는 url의 어떤 부분으로부터 로케이션 객체를 생성하느냐이다. 브라우저 히스토리는 전체 url을 사용하는 반면, 해시 히스토리는 url에서 첫번째 해시 심볼 이후에 나타난 부분만 사용한다. url = 'http://www.example./com/path/name?key=value#has..
- Total
- Today
- Yesterday
- CSS
- 인스턴스
- react
- 자바
- 제네릭스
- GIT
- this
- Redux
- package.json
- rxjs
- 리덕스
- Conflict
- 개발 공부
- linkedlist
- Java
- Data Structure
- useEffect
- 깃
- til
- getter
- oracle
- SQL
- JavaScript
- c언어
- youtube data api
- Prefix Sums
- jQuery
- Session
- 알고리즘
- 포인터 변수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |