본문 바로가기

전체 글657

[programmers][2020카카오공채] 가사 검색 문제 : https://programmers.co.kr/learn/courses/30/lessons/60060 검색 키워드는 와일드카드 문자인 '?'가 하나 이상 포함돼 있으며, '?'는 각 검색 키워드의 접두사 아니면 접미사 중 하나로만 주어집니다. 단어들이 주어지고 접미사, 접두사를 제공하며 단어들의 개수를 묻는다. -> 트라이! 접두사에 대한 질문은 문자열의 앞에서부터 탐색하니까 일반적으로 풀 수 있는데 접미사는 뒤에서부터 탐색해야 하므로 문자들을 역순으로 만든 후 트라이를 하나 더 만든다. (접미사, 접두사를 위해 각자 1개씩 2개의 트라이 생성) 검색 키워드가 문자로 시작하는 경우(?로 끝나는 경우) 접두사를 위해 만든 트라이를 이용하여 탐색하고, 검색 키워드가 ? 으로 시작하는 경우 해당 키워.. 2020. 5. 12.
[programmers][2020카카오공채] 자물쇠와 열쇠 문제 : https://programmers.co.kr/learn/courses/30/lessons/60059# N, M 범위가 20으로 널널하기 때문에 구현, 시뮬레이션으로 풀었다. 일단 키를 회전한 모습을 배열에 저장한다. for (int i = 0; i 2020. 5. 10.
[leetcode][367] Valid Perfect Square 문제 : https://leetcode.com/problems/valid-perfect-square/ 양수 num이 주어졌을 때, num이 완벽한 제곱수면 true, 아닌경우 false를 반환한다. sqrt 함수를 사용하지 않고 풀어라. 변수 하나를 1로 초기화시킨 후 제곱 수가 num보다 크거나 커질때까지 1씩 증가한다. 제곱수가 num과 같은 경우 true를 반환하는 방식으로도 풀 수 있다. 그리고 이분탐색으로도 풀 수 있다. left = 1, right = num으로 두고 중간 값(m)의 제곱이 num이라면 true를 반환, 작다면 left = m+1, 크다면 right = m-1로 세팅하고 left가 right보다 작거나 큰 경우 이를 반복한다. left가 right보다 커질 때까지 true를 반.. 2020. 5. 9.
[테트리스] 15. 시간 지날수록 블럭 속도 감소 오늘의 이슈. 지금은 블럭 속도가 처음 지정한 속도로 게임이 끝날때까지 유지되는데, 난이도 조절을 위해 시간이 지날수록 블럭 속도가 빨라지게 해보자. // timer.js class Timer { setDifficulty() { var that = this; that.difficultyTimerId = setInterval(function() { that.speed *= 0.9; // 속도를 10% 감소시킨다. that.refreshGame(that.speed); // 감소된 속도로 세팅 }, 10000); // 10초마다 스피드 갱신 } startGame() { this.refreshGame(this.speed); // 시작 스피드로 게임 시작 this.setDifficulty(); // 난이도 세팅 .. 2020. 5. 7.
[테트리스] 14. 블럭이 지면에 닿았는지 판단하는 알고리즘 개선 오늘의 이슈. setInterval로 설정한 스피드가 아닌 바닥에 도달하였는지 여부는 시간 설정을 다르게 한다. 예를 들어 바닥에 닿았다고 하더라도 왼쪽이나 오른쪽으로 이동한 경우, 블럭을 회전시킨 경우 특정 시간이후 다시 바닥에 닿았는지 체크했다. Timer 클래스를 만들고 그 클래스에 게임 시작, 게임 종료, setInterval 관련 코드들 실행을 모두 위임했다. class Timer { this.gameTimerId = null; // setInterval Id. 종료시 사용. this.bottomTime = null; // 바닥에 닿았는지 판단하는 타임아웃 최대시각 this.bottomTempTime = null; // 바닥에 닿았는지 판단하는 타임아웃 중간 시각.( 블럭 이동, 회전시 갱신) .. 2020. 5. 4.
[테트리스] 13. 다음에 나타날 블럭 1개에서 3개로 변경 오늘의 이슈. 다음에 나올 블럭의 개수를 1개에서 3개로 변경한다. // 다음 블럭 클래스 class NextBlock { // size만큼 랜덤 타입을 만들어 typesQ에 차례로 넣는다. constructor(size) { this.typesQ = []; for(var i = 0; i { map[type.name] = index; return map; }, new Map()); // blockType 요소로 인덱스 가져오기 var getBlockTypeIndex = function(blockType) { return blockTypeMap[blockType.name]; } 1번째 캡쳐화면에서 ctrl을 눌러서 떨어지고 있는 블럭을 keep 해둔다. 2번째 화면에서 I자 형 블럭이 떨어질 때, ctrl.. 2020. 4. 29.