전체 글 607

React Part 1 - Step 1

React 시작 (Terminal 에 입력) npx create-react-app {{프로젝트명}} cd {{프로젝트 명}} npm start 리엑스에서 데이터 바인딩 {} 중괄호를 사용하여 바인딩 하기 (className과 같은 거의 모든 곳에서 사용이 가능) import './App.css'; import logofrom './logo.svg' function App() { // let post = "강남 고기 맛집" function 함수() { return 100 } return ( 개발 Blog {함수()} ); } exportdefault App; JSX에서 Style 속성을 집어넣을 때 Vue, Html에서 Style의 속성을 집어넣을 때처럼 style='font-size: 16px' 와 같이..

React 2023.06.25

[프로그래머스] 의상

# 한참 고민하다가 다른 분의 힌트를 받고 해답을 알게 됨. # 힌트는 각 섹션별로 착용하지 않는걸 생각한다면 편할 것 같다. # 예를 들어 아래와 같이 종류가 세가지가 있고 종류마다 2가지의 아이템인 (red, blue)이 있다고 했을 경우 # ["headgear", "eyewear", "underwear"] # red, blue, no 이렇게 3가지의 경우로 생각한다면 # 각 아이템 별로 개수를 곱한 다음 모든 아이템을 안입는(no) 경우인 # headgear-no, eyewear-no, underwear-no 인 경우를 하나 뺀 걸 return 하는 방식. from math import prod def solution(clothes): dic = {} for i in clothes: try: dic..

알고리즘 2023.06.25

NodeJS+MongoDB Part3 - User (Session, JWT, OAuth)

회원인증방법 Session-Based 페이지에서 서버로 로그인 요청시 서버는 쿠키를 전달하게 됨 쿠키란 브라우저에 저장할 수 있는 긴 문자열 그래서 쿠키에 Session_ID 가 담겨져 있음 그래서 서버 메모리에 유저의 로그인 정보를 저장하게 되면서 세션이 저장되었다는 정보를 쿠키로 만들어서 브라우저에 전송 이후 브라우저는 저장하게 되고 그것이 로그인을 한 상태가 되는 것 로그인 후 활동으로 예를 들어 마이페이지를 보여달라고 할 때 자동으로 쿠키를 전송하게 되고, 서버의 Session Store에서 쿠키 안에 있는 Session_ID를 찾아서 로그인 했는지 확인 후 페이지를 보여주게 됨 Session-Based의 특징은 로그인 상태를 저장하는 것 JWT (Token-Based, JSON Web Token..

NodeJS+MongoDB 2023.06.23

NodeJS+MongoDB Part2 + PUT

PUT 요청으로 게시글 데이터 수정하기 우선 HTML 에서 PUT 이나 DELETE 요청이 없기에 라이브러리를 설치해보기! npm i method-override 설치 이후 server.js 에서도 코드를 추가해주기 const methodOverride = require("method-override") app.use(methodOverride("_method") 그리고 수정하고자 하는 페이지인 edit.ejs 파일을 만들어서 write 페이지와 똑같이 레이아웃 짜고, 여기서 아까 수정했던 method-override 코드를 form 태그에 추가하기! 추가 코드는 form 태그의 action 속성에 action = “/edit?_method=PUT” 으로 경로?_method=메서드 종류 로 추가하고 me..

NodeJS+MongoDB 2023.06.23

[프로그래머스] [1차] 캐시

# 정답1 (deque의 maxlen 사용) # rotate 코드보다 더 빠른거 같음! from collections import deque def solution(cacheSize, cities): if cacheSize == 0: return len(cities)*5 cities = [ i.upper() for i in cities] result, cnt, cnt_idx, cache_li = 0, 0, 0, deque(maxlen=cacheSize) while cnt < len(cities): if cities[cnt] in cache_li: # 지역이 존재할 경우 가장 앞에 있는 값을 맨 뒤로 보내면서 +1 해주기 del cache_li[cache_li.index(cities[cnt])] cache..

알고리즘 2023.06.23

NodeJS+MongoDB Part2

MongoDB 셋팅하기 (무료 호스팅도 받아보자) MongoDB 가입 후 Atlas에서 무료 호스팅으로 db를 열기 (과정은 따로 찾아보기) 이후 MongoDB에서 만든 db와 로컬에서 작업중인 server와 연결하기 위해 우선 mongodb 설치하기 // 강의와 같은 환경 구축을 위해 아래의 버전 설치 했다는 점. $ npm install mongodb@3.6.4 그리고 MongoClient를 연결하기 위해 아래와 같이 코드 작성 // log를 작성한 이유는 그냥 서버 연결이 되었을 때 확인해보기 위해 작성했음. const MongoClient = require("mongodb").MongoClient; MongoClient.connect( "mongodb+srv://admin:ghdals9578@cl..

NodeJS+MongoDB 2023.06.22

[프로그래머스] 행렬의 곱셈

우선 행렬의 곱셈에 대해 모를 경우 아래의 유튜브 링크로 들어가서 확인하면 좋을듯하다. (나도 몰랐으니까 ㅎ..) https://www.youtube.com/watch?v=9BFQ3_bxfUs # 어려웠던 부분은 행렬의 곱셈에 대해서 몰랐었던 부분? def solution(arr1, arr2): answer = [[0]*len(arr2[0]) for _ in range(len(arr1))] for i in range(len(arr1)): # arr1 행 for j in range(len(arr2[0])): # arr2 열 for x in range(len(arr2)): # arr2 행 answer[i][j] += arr1[i][x]*arr2[x][j] return answer

알고리즘 2023.06.22

[프로그래머스] n^2 배열 자르기

# 왼쪽, 오른쪽 사이에 해당하는 값으로 몫과 나머지를 구한 다음 큰 값에 +1 시켜줘서 추가해주기 def solution(n, left, right): result = [] for i in range(left, right+1): x, y = i//n, i%n if x >= y: result.append(x+1) else: result.append(y+1) return result # 시간초과 # 해당 풀이는 처음 접근한 방식으로 2차원 배열처럼 생각을 한 상태로 # 2중 for문을 돌려 해결해보려 했음. # 추후 시간 초과로 인해 첫번째 for문에서 left 값보다 cnt 값이 더 작으면 # n만큼 cnt에 추가해주는 형식으로 시간을 줄이려 했지만 엄청 빡빡한 타임으로 안됨... def solution..

알고리즘 2023.06.21

[프로그래머스] 연속 부분 수열 합의 개수

# 원래 dic의 값이 0 이 아닐때도 조건문을 통해 제어를 했는데 굳이 인가 싶어서 뺌 # 아래 코드보다 시간 효율이 더 좋음 def solution(elements): dic, ln = {i:0 for i in range(sum(elements)+1)}, len(elements) for i in range(ln): hap = elements[i] dic[hap] = hap for j in range(i+1, i+ln): hap += elements[j%ln] dic[hap] = hap return len([ i for i in list(dic.values()) if i != 0]) # 연결 리스트로 푼게 아닌 기존 배열을 두배로 늘려서 하다보니 엄청 시간이 길어짐 # 풀어지긴 함 def solutio..

알고리즘 2023.06.20

[프로그래머스] H-Index

# 정답 def solution(citations): h, c_ln, result = 0, len(citations), 0 for i in range(1, c_ln+1): ln = len([j for j in citations if j >= i]) if not (ln >= i): break elif ln >= i: result = i return result # 실패 # 이유는 8번 줄의 if not 부분으로 가는 경우가 없이 # for 문이 정상으로 마무리 되는 경우가 있기 때문! 9번 Case!! def solution(citations): h, c_ln, result = 0, len(citations), 0 for i in range(1, c_ln+1): ln = len([j for j in cit..

알고리즘 2023.06.19