20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net 아이디어: 매번 DFS돌리며 사이클을 검출하려면 TLE가 발생하니 각 노드를 하나의 집합으로 두고 같은 집합끼리 묶으려 하면 사이클임을 알 수 있다. 결국 DFS가 아닌 Union-find를 쓰는 문제이나, 노드의 숫자인 N= 500,000이며 merge시행 횟수인 M= 1,000,000 이므로 O(N)으로 Union-find를 하면 TLE 따라서 find과정에서 만나는 과정마다 부모를 최상위 노드로 설정해가며 O(logN)으로 만들 필요가 있었다. int ..
2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 아이디어 숫자들을 정점으로 생각하면 뽑은 숫자들의 집합이 일치한다 => 사이클이 있다고 볼 수 있다. 사이클을 검출하는 방법 : DFS DFS를 돌다가 DFS가 아직 다 돌지않은 정점을 만나게 되면 사이클이 있다고 생각할 수 있다. (다만 방문여부와는 별개로 생각해줘야한다. 처음 방문하는 정점도 DFS를 다 돌진 않은 상태니까) DFS를 돌면서 자신이 이전에 방문한 정점을 저장해준다면 DFS가 다 안돈 정점부터 차례대로 자기 자신을 만날 때 까지 정..
context API를 통하여 상위 컴포넌트에서 원하는 컴포넌트까지 줄줄이 전달하지 않아도 바로 전달할 수 있게 되었지만 이전 버전에서는 사용이 불편했다. context API가 예전보단 사용하기 편해졌지만 그 대책이었던 Redux가 큰 프로젝트에서 효율적이고 상태를 한눈에 보기 편해서 여전히 잘 쓰인다. Store 스토어에는 애플리케이션의 상태 (state)와 리듀서들이 들어가있다. 스토어는 프로젝트에 단 하나만 존재할 수 있으며 내장함수로 dispatch와 subscribe를 가진다. dispatch : 파라미터로 넘어온 액션 객체 (함수)를 리듀서에 전달하여 상태를 업데이트한다. subscribe : 리스너 함수를 넣어서 호출해주면 리스너 함수가 상태가 업데이트될 때마다 호출된다 Reducer 리듀..
동기적 (Synchronous) 작업을 요청이 끝날 때 까지 기다렸다가 완료가 되서야 다음 작업을 실행하는 방식. 익숙한 방식이지만 웹에서는 비효율적이다. 비동기적 (Asynchronous) 그래서 앞선 작업이 끝나건 말건 다음 작업을 실행해서 동시에 여러 요청을 처리할 수 있다 (병렬처리인가) 그래서 순차적으로 실행되길 원한다면 콜백지옥을 구현해야 했지만 ES6부터 Promise가 도입되었다. const Promise_async_await = () => { function increase(number) { // 성공 : resolve, 실패 : reject const promise = new Promise((resolve, reject) => { setTimeout(() => { const result..
이유는 알 수 없지만 News-API를 이용하여 실습하던중에 틀린 부분도 없이 실행이 안되서 고생했다. HTTP 426 error 였는데 protocol update가 필요하다는 내용이었다. 좀 더 알아보니 자신의 localhost에서 나오지 않는 request는 죄다 reject 해버린다는 내용이었는데,,, 이러면 구름IDE를 이용할 수 없었다. (구름 IDE는 localhost가 아닌 IDE상에서 지정한 웹페이지로 띄워버리기 때문이다) 덕분에 2시간 날려먹고 이렇게 글을 쓰면서 정리하게 되었다.
오늘 어이없게 시간 날려서 박제용으로 포스트 /* 인수를 넘겨 받을 때 int를 사용하게 되면 중간 계산 결과가 overflow 발생한다 */ int cross(pair v1,pair v2){ long double ans=v1.first*v2.second-v1.second*v2.first; if(ans>0) return 1; else if(ans==0) return 0; else return -1; } /*주의 : 일직선상에 놓이면 a*b==0 && c*d==0이지만 역은 성립 안한다. 이걸 놓쳤다.*/ /* 세 점이 일직선상에 놓이게 되면 a*b==0 && c*d==0 따라서 4점이 일직선상에 놓이게 되는 경우에도 위 사례가 성립하지만 4점이 일직선상에 놓인다고 해서 둘다 0이 되진 않는다.*/ if(..
- Total
- Today
- Yesterday