본문 바로가기

전체 글657

[테트리스] 12. 블록이 바닥에 닿았을 때 모습 출력. 오늘의 이슈. 거의 7개월만에 했는데 코르 품질이 영 좋지 않다. 일단 개발하긴 했는데 리팩토링이 시급해보인다. // nx, ny 위치의 블록이 바닥에 떨어졌을 때 모습을 그리기. this.drawPreview = function(nx, ny) { for (var k = 0; ; k++) { if(this.isBottom(nx, ny + k + 1)) { this.justDrawBlock(nx, ny + k); return; } } } // x, y 위치의 블록이 바닥에 떨어졌을 때의 블록을 지우기. this.erasePreview = function(x, y) { for (var k = 0; ; k++) { if(this.isBottom(x, y + k + 1)) { this.eraseBlock(x, .. 2020. 4. 27.
[leetcode][45] Jump Game II 문제 : https://leetcode.com/problems/jump-game-ii/ 음수가 아닌 정수 배열이 주어진다. 배열 값은 그 인덱스에서 1번의 점프로 최대 몇 개의 인덱스를 이동할 수 있는지를 의미한다. 즉, arr[3] = 2인 경우 3인덱스에서 4, 5로 이동할 수 있다. (4, 5로 이동할 때 1번 점프로 이동가능을 의미) 0인덱스에서 시작할 때, 최소 몇 번의 점프로 마지막 인덱스까지 도달할 수 있는가. (마지막 인덱스까지 도달할 수 없는 경우는 없다고 한다.) 그리디로 해결가능하다. 0부터 탐색하면서 탐색 중인 인덱스까지 도달하기 위해 필요한 최소 점프횟수(ans), 최대로 이동할 수 있는 인덱스(maxInd), 그리고 임시 최대이동가능 인덱스(tmp)를 구한다. tmp는 임시로 저.. 2020. 4. 26.
[Kickstart][2020][Round B] 3. Robot Path Decoding 문제 : https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc8/00000000002d83dc (1, 1) 좌표에서 시작해서 109개의 행, 열이 있는 좌표가 있다. (w, h)는 w번째 열, h 번째 행을 의미한다. 이동하는 방법이 문자열로 주어진다. WEST는 방향을 의미한다. (W: West, E: East, S : South, N: North) X(Y) 형식으로도 표현하는데 X는 2~9인 숫자이고, Y는 이동하는 방법이 주어진다. X(Y)는 Y를 X번 반복하는 것을 의미한다. 예를 들어, 2(S2(E))는 SEESEESEE와 같다. 이동이 끝난후 w, h를 구해라. 가능한 숫자가 2~9 이기 때문에 숫자가 나오는 경우 .. 2020. 4. 25.
[leetcode][201] Bitwise AND of Numbers Range 문제 : https://leetcode.com/problems/bitwise-and-of-numbers-range/ 0 이상 2147483647 이하인 수 m, n(m 앞에서부터 자릿수를 비교해봤을 때, 다른 비트가 나오는 경우는 이후의 비트들도 AND연산을 하면 결국 0이된다고 추측할 수 있다. (prefix를 구해야한다.) m=101011(43), n=101111(47)을 예로 들어보자. 두 수의 prefix는 101000(40)이다. (prefix는 101 이지만 실제로 알고싶은건 101000 이기 때문에 편의상 이렇게 표현) 101011에서 101111이 되기 위해서는 4번째 자리의 0이 1이 되기 위한 과정이 필요하다. 이 때 4번째 자리 이후의 비트들은 모두 0이 될것이다. 즉, 다른 비트가 .. 2020. 4. 24.
[Kickstart][2020][Round B] 2. Bus Routes 문제 : https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc8/00000000002d83bf n개의 버스노선을 이용하여 여행을 하고 싶다. 버스노선을 차례대로 이용한다고 했을 때 (i < j, Xi 이용 후 Xj 이용) D 일 이내에 여행을 마쳐야 한다(마지막 버스를 D일 이내에 타야한다). i번 노선의 배차 간격이 주어졌을 때, (예를 들어 Xi = 2라면, i번째 버스는 2, 4, 6 ... 에 이용 가능하다.) 하루에 여러개의 버스 노선의 이용이 가능하다고 한다. 가능한 늦게 여행을 시작하고 싶을 때, D일 이내에 도착할 수 있는 여행 시작일을 구하라. D일까지 여행을 마치는 것이 가능하다. (버스 노선을 차례대로 이용.. 2020. 4. 23.
[Kickstart][2020][Round B] 1. Bike Tour 문제 : https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc8/00000000002d82e6 산의 높이 배열이 주어질 때, 산의 peak의 수를 구하라. 자신의 높이보다 양쪽 산의 높이가 작을 때 peak가 된다. N을 산의 갯수라 할 때, 1~N-2 를 탐색하면서 arr[i-1] arr[i+1] 의 횟수를 구한다. 시간복잡도는 O(N). N = 산의 수. 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/codejam/kickstart/2020/roundB/1.%20Bike%20Tour.cpp 2020. 4. 20.