알고리즘을 풀 때 자주 최대공약수가 필요한 경우가 생겼다. 최대공약수를 사용해 풀었던 문제 프로그래머스 레벨 0 / 분수의 덧셈 프로그래머스 레벨 0 / 유한소수 판별하기 프로그래머스 레벨 1 / 최대공약수와 최소공배수 여러 번 최대공약수를 구해야 하는 문제를 풀었는데도 매번 기억이 안 나서 까먹을 때마다 보려고 기록해 둔다. 최대공약수 유클리드 호제법 최대공약수는 유클리드 호제법을 이용하면 구할 수 있다. 두 개의 숫자가 있을 때 x를 y로 나누었을 때 나머지(r)가 0이면 y는 이 두 수의 최소공배수가 된다. 나머지가 0이 될 때까지 값을 앞으로 당겨가며 계속 반복하면 된다. while문을 사용해서 표현했을 때 최소공배수가 구해진 시점(r이 0일때)에 y가 r이 되면 0이 되므로 종료된다. 하지만 그..
Redux 공식 문서를 봐가면서 Redux를 적용했는데 reducer함수의 action 타입을 정해주는데 애를 먹었다. 이를 해결하다가 새로운 타입스크립트 문법을 알게 되었다. // action의 타입을 무엇으로 해야한단말인가... const todoReducers = (state = initialState, action) => { switch (action.type) { case 'ADD_TODO': // ... state 변경 로직 } } ReturnType ReturnType을 사용하면 함수 Type의 반환 타입으로 구성된 타입을 생성한다. ReturnType // 예시 type T0 = ReturnType string>; // type T0 = string type T1 = ReturnType v..
원격 저장소에 있는 다른 브랜치를 받아오고 싶을 때! 원격 저장소에 있는 브랜치 확인하기 git branch -r 원격 저장소와 동일한 이름의 브랜치가 있으면 삭제하기 git branch -d dev 원격 저장소 브랜치 가져오기 -t : 원격 저장소와 동일한 이름의 브랜치를 생성하고 해당 브랜치로 이동 -f : 문제가 발생해도 강제로 브랜치 이름과 동일한 로컬 저장소 브랜치를 생성하고 해당 브랜치로 이동 -b : 브랜치이름을 변경해서 가져올 수 있음 // git checkout -t 원격저장소브랜치이름 git checkout -t origin/develop
공식문서 onChangeText 의 텍스트가 바뀔 때 발생하는 이벤트이다. event로 텍스트를 받아오는 것 같다. import React, { useState } from 'react'; import { Text, TextInput, View } from 'react-native'; const PizzaTranslator = () => { const [text, setText] = useState(''); return ( setText(newText)} defaultValue={text} /> {text.split(' ').map((word) => word && '🍕').join(' ')} ); } export default PizzaTranslator; onSubmitEditing 의 버튼이 눌렸을 ..
요즘 프로그래머스 0단계를 하루에 하나씩 풀고 있는데 종이 자르기 문제를 구질구질하게 풀었다가 정답 코드를 보니 허망해져서 기록해 둔다. M = 1, N = 9와 같은 3번 케이스를 통과하기 위해서 if문에 elif를 추가해 이렇게 풀었다. # 첫번째 풀이 def solution(M, N): if M == 1 and N == 1: return 0 answer = [M - 1, 0] if M > 1 and N == 1: answer[1] = M - 1 elif M == 1 and N > 1: answer[1] = N - 1 else: answer[1] = M * (N - 1) return sum(answer) 그런데 다른 사람들의 정답을 보니 한 줄이었다...🥲 # 다른 사람의 풀이 def solution..
프로젝트를 진행하는데 이미지 저장 기능이 우리 서비스의 메인 기능 중 하나다. 기능 구현을 하고 카카오톡 인앱브라우저에서 테스트해보는데 사진 저장 버튼을 누르면 버튼이 눌리기만 하고 저장이 안 됐다. https://brunch.co.kr/@b30afb04c9f54dc/45 카카오톡은 왜 인앱 브라우저를 고수할까 인앱브라우저와 인앱결제에 대하여 | 카카오톡,인스타그램은 왜 인앱 브라우저를 고수하는걸까? 친구가 카카오톡으로 공유해준 인스타그램 게시글 링크를 선택하면, 인스타그램으로 바로 넘어 brunch.co.kr 찾아보니 인앱브라우저는 아주 사악한 녀석이라는 것을 알게 됐다. 인앱브라우저는 보통 브라우저에서 지원하는 기능들을 지원하지 않는 것이 많으며 브라우저 높이 반환값 같은 것들도 이상하다고 한다. 개..
요즘 sns 프로젝트를 진행하고 있다. 유저가 포스트에 사진을 첨부해 업로드하면 DB에 저장하는 방식으로 진행하려고 했다. 백엔드 팀원도 나도 처음 구현해보는 기능이라 생각처럼 안되서 사진 저장 서비스를 이용하기로 했다. 전에 한 번 사용해본 사진 이미지 크기를 조정해서 저장할 수 있는 Cloudinary를 이용하기로 했다. cloudinary npm 패키지도 있지만 REST API를 사용해서 추가로 설치하지는 않았다. cloudinary를 가입하면 받는 cloud name, API key등은 .env 파일로 관리했다. 설정에 들어가서 upload에 Upload presets를 만들어줘야한다. 기본으로 signed로 되어있는데 그럼 업로드마다 로그인을 해줘야 하므로 로그인을 하지 않아도 되는 Unsign..
얕은 복사와 깊은 복사를 주소를 참조하는지, 데이터를 복사하는지로 알고 있었다. 그래서 복사를 하고 싶을 때 깊은 복사를 해서 잘 사용하고 있었는데 오늘 깊은 복사를 했는데도 얕은 복사를 한 것처럼 작동하는 상황을 만나 새로운 사실을 알게 됐다. 얕은 복사(shallow copy) 얕은 복사는 해당 요소를 참조하는 데이터 주소를 할당하게 된다. 그래서 얕은 복사를 한 요소를 변경하면 원본 요소가 변경된다. ===를 사용해서 비교해봐도 똑같다고 나온다. const original = { name: 'original' }; const copy = original; console.log(original.name); // original console.log(copy.name); // original copy...
- Total
- Today
- Yesterday
- 제로초
- TS
- 저스트코드
- 자바스크립트
- map
- html
- 파이썬
- CSS
- js
- javascript
- 코드잇
- vscode
- vue
- 비주얼스튜디오코드
- 회고
- Typescript
- 깃
- 드림코딩
- 리액트
- 구름에듀
- git
- scss
- 타입스크립트
- Til
- 스파르타코딩클럽
- 코딩앙마
- 제이쿼리
- 김버그
- React
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |