Loading...

[프로그래머스] 땅따먹기 (파이썬, javascript )

dp 문제 열이 연속으로 같지 않게 최대값 구하는 문제 1. 파이썬 def solution(land): for i in range(1,len(land)): for j in range(4): land[i][j]+=max(land[i-1][:j]+land[i-1][j+1:]) return max(land[len(land)-1]) 2. javascript function solution(land) { var answer = 0; let n=land.length; let dp=Array(n).fill(0).map(()=>Array(4).fill(0)); for(let j=0;j

브라우저 렌더링 과정

브라우저 주소창에 주소를 입력한다 (ex. www.naver.com) DNS가 해당 서버가 어디있는 지 찾아 연결해준다. (https가 있다면 https방식으로 통신한다) 서버에서 index.html 파일을 클라이언트로 전송한다 렌더링 엔진의 html 파서와 css 파서가 각각 html,css 파일을 파싱하여 DOM, CSSOM 트리로 변환한다. html파서가 중간에 link태그를 만나면 css를 파싱하며 css 파싱이 끝나면 다시 html파싱을 하여 DOM 트리를 만든다. (css 정보 없음) DOM 트리와 CSSOM트리를 합쳐 render tree를 만든다. (여기서는 스타일 정보가 들어간다) html 파서는 script 태그를 만나면 javascript 엔진으로 제어권한을 넘기고 자바스크립트를 파싱..

[프로그래머스] 영어 끝말잇기 (파이썬)

dictionary 사용 def solution(n, words): answer = [] dic={} prev=words[0] dic[prev]=0 for i,w in enumerate(words): if i==0: continue if w[0]!=prev[-1] or w in dic: return [i%n+1,i//n+1] else: prev=w dic[w]=i return [0,0]

[프로그래머스] h-index (파이썬, javascript)

1. javascript 가장 큰 인용 가능 수 =논문 개수, 최소=0 나는 완전탐색으로 했다 function solution(citations) { var answer = 0; for(let i=citations.length;i>=0;i-=1){ const arr=citations.filter(x=>x>=i); if(arr.length>=i && citations.length-i0: cnt=0 for c in citations: if c>=idx: cnt+=1 if cnt>=idx and len(citations)-cnt

[프로그래머스] 짝지어 제거하기 (파이썬, javascript)

o(n) 시간 안에 해결해야 되는 문제들을 잘 못 푸는데 이런 방법이 있다는 것을 알았다 여기저기 쓰일 것 같으니 잘 봐놔야지 1. 파이썬 풀이 def solution(s): answer = [] for i in range(len(s)): if len(answer)==0: answer.append(s[i]) elif answer[-1]==s[i]: answer.pop() else: answer.append(s[i]) if len(answer): return 0 else: return 1 2. javascript function solution(s) { var answer = 0; const stack=[]; for(let i=0;i

[You Don't know JS] part 2-1 스코프와 클로저 - 스코프란 무엇인가 정리

스코프 특정 장소에 변수를 저장하고 나중에 그 변수를 찾는데 정의된 규칙의 집합 컴파일러 자바스크립트는 사실 컴파일러 언어이다. (일반적으로 동적, 인터프리터 언어로 분류됨) 다른 전통적인 컴파일러 언어처럼 코드를 미리 컴파일하거나 그 결과를 분산 시스템에서 이용할 수는 없다 자바스크립트 엔진이 전통적인 컴파일러 언어에서 하는 컴파일러 역할을 대부분 처리한다 전통적인 컴파일러 처리 과정 소스코드가 실행되기 전에 보통 3단계를 거치는데, 이를 컴파일레이션이라고 한다 1. 토크나이징/렉싱 문자열을 나눠 토큰이라는 의미있는 조각으로 만드는 과정 var a=2; => var / a / = / 2 / ; 토크나이저가 상태 유지 파싱 규칙을 적용해 a가 별개의 토큰인지 다른 토큰 일부인지 파악한다면 그것은 렉싱이다..

프로그래머스 순위 (파이썬, set)

def solution(n, results): answer = 0 win={x:set() for x in range(1,n+1) } lose={x:set() for x in range(1,n+1)} for winner,loser in results: win[winner].add(loser) lose[loser].add(winner) for i in range(1,n+1): for winner in lose[i]: win[winner].update(win[i]) for loser in win[i]: lose[loser].update(lose[i]) for i in range(1,n+1): if len(lose[i])+len(win[i])==n-1: answer+=1 return answer

프로그래머스 가장 먼 노드 (파이썬, bfs)

vis배열을 -1로 초기화시키고 bfs를 돌며 vis가 -1인 원소들을 집어넣으며 현재 길이를 vis배열에 다시 집어넣는다 from collections import deque def solution(n, edge): answer = 0 vis=[-1]*(n+1) adj=[[] for _ in range(n+1)] for e in edge: adj[e[0]].append(e[1]) adj[e[1]].append(e[0]) q=deque([[1,0]]) vis[1]=0 while q: cur,cnt=q.popleft() for a in adj[cur]: if vis[a]!=-1: continue vis[a]=cnt+1 q.append([a,vis[a]]) return vis.count(max(vis))

프로그래머스 단속카메라 (그리디, 파이썬)

내림차순으로 정렬하고 가장 위치가 큰 애부터 passed배열에 넣고 단속카메라에 걸리는 애들을 모두 passed에 넣으며 현재 존재하는 카메라를 만나지 못하는 애들의 진입점을 새로운 카메라 위치로 넣어준다 포인트 : for ~ else 문법, set 문법 def solution(routes): answer = 0 routes=sorted(routes,reverse=True) print(routes) camera=[routes[0][0]] passed=[0] while len(passed)!=len(routes): for i,r in enumerate(routes): if i in passed: continue for c in camera: if r[0]

프로그래머스 입국심사 (파이썬, javascript, 이분탐색)

l, r은 시간 기준이며 모든 사람이 다 처리될 수 있는 최소 시간을 구해준다 mid(기준 시간)을 각 줄에서 처리할 수 있는 시간으로 나눠주면 전체 처리된 인원 수가 나오게 된다 1. 파이썬 def solution(n, times): l=min(times)*n//len(times) r=max(times)*n//len(times) answer=r while l=n: if answer>mid: answer=mid r=mid-1 else: l=mid+1 return answer 2. javascript 사람 수가 n보다 큰 경우도 시간을 갱신하는 조건이다. 가장 오래는 걸리는 시간을 right으로 해서 전체 시간을 각 시간으로 나눠준 것으로 사람 수를 계산한다. function solution(n, time..