자바스크립트 썸네일형 리스트형 2018 카카오 코딩테스트 1차 다트 게임 JS 문제풀이 🔗직접 문제 풀러가기 문제 다트 게임은 총 3번의 기회로 구성된다. 각 기회마다 얻을 수 있는 점수는 0 - 10점. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재한다. 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱으로 계산된다. 옵션으로 스타상(*) , 아차상(#)이 있다. 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다. 스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번) 스타상(*)은 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번) 스타상(*)의 효과는 아차상.. 더보기 2018 카카오 코딩테스트 1차 비밀지도 JS 문제풀이 🔗직접 문제 풀러가기 문제 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 공백(" ") 또는벽("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 지도1과 지도2라고 하자. 지도1 또는 지도2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. 지도 1과 지도 2는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. 문제풀이 1. 각 배열의 i번째 정수를 이진수로 바꾸었을 떄 01 과 11라면 해독된 숫자는 이진수 11이다. 즉, OR 연산을 활용하면 된다. 2. .. 더보기 매트릭스 회전시키기 leetcode 48. Rotate Image 문제풀이 문제: 주어진 행렬을 시계반향으로 90도 회전시켜라. 아이디어 회전된 행렬의 원소들이 원래 어떤 인덱스를 가지고 있었는지 관찰해보면 힌트를 얻을 수 있다. 원본 |00|01|02| |10|11|12| |20|21|22| 회전된 행렬 |20|10|00| |21|11|01| |22|12|02| 첫번째 행의 원소들은 모두 첫번째 열에서 왔다. 열과 행이 바뀌었다. 각 행의 원소들은 [2x, 1x, 0x] 역순으로 정렬되어있다. 알고리즘 원본 |00|01|02| |10|11|12| |20|21|22| 전치 행렬 |00|10|20| |01|11|21| |02|12|22| 그리고나서 각 행이 반전된 행렬 |20|10|00| |21|11|01| |22|12|02.. 더보기 [JS] 정렬 메소드 활용하기 1. Array.prototype.sort() 메소드 설명과 예시 2. Leetcode 1366. Rank Teams by Votes 문제풀이 Array.prototype.sort([compareFunction]) .sort()는 배열의 원소들을 in-place로 정렬해주는 메소드이다. 정렬된 복사본이 만들어지는 것이 아니라, 원 배열이 정렬된다는 뜻이다. 원소들을 string으로 변환하고 해당 시퀸스내 단위의 UTF-16 코드 값을 기준으로 오름차순으로 정렬하는 것이 기본 정렬 방식이다. 따라서 string이 들어있는 배열을 기본 정렬하면 사전식으로 정렬된다. 기본 정렬 방식 이외에 다른 방식으로 정렬을 하고 싶다면, 직접 인자에 원하는 동작을 하는 비교함수를 입력하면된다. (a, b) => -1: 비.. 더보기 뒤에서 n번째 노드 삭제하기 알고리즘 1. 포인터 hare를 n만큼 먼저 이동시킨다. 2. curr와 hare를 같은 속도로 이동시킨다. 이때 curr는 헤드에서 hare는 n번째 노드에서 출발한다. 3. curr과 hare사이에는 n개의 노드가 있으므로, hare가 뒤에서부터 1번째에 있을 때 curr는 뒤에서부터 n+1번째 노드에 있다. 그러므로 curr.next가 다음다음 노드를 가르키도록 수정하여 n번째 노드를 삭제할 수 있다. 엣지 케이스 n이 연결리스트의 길이와 같을때가 엣지케이스이다. curr의 다음 노드를 삭제하는 것이 아니라, 리스트의 첫번째 노드를 삭제해야해야한다. 길이가 n인 연결리스트의 헤드에서 n번 떨어진 곳은 null이다. 그러므로 hare가 null값인지에 따라 이를 구분할 수 있다. 복잡도 분석 시간복잡.. 더보기 사이클 감지하기 leetcode 141. Linked List Cycle 문제풀이 문제: 주어진 연결리스트에 사이클이 있다면 true를 없다면 false를 반환하라 Hash Set 1. 각 노드를 set에 추가해가며 순회한다. 2. 다음에 순회할 노드가 이미 set에 들어있다면 true를 반환. 3. 순회를 무사히 마쳤다면 사이클이 없는 것이므로 false를 반환. 모든 노드를 set에 저장하려면 O(N)공간이 필요하다. set에 노드를 저장하는 것 대신, 노드의 val값에 이미 방문했음을 표시한다면 메모리를 아낄 수있다. Two Pointer 투 포인터 테크닉을 활용해서도 공간복잡도를 O(1)으로 제한할 수 있다. 투 포인터 테크닉은 한 포인터는 더 빠르게 또 다른 포인터는 더 느리게 움직이도록하는 테크닉을 말한다. .. 더보기 [JS] 두 날짜가 몇일 차이인지 계산하기 Leetcode 1360. Number of Days Between Two Dates 문제풀이. new Date() 자바스크립트 Date 는 플랫폼 독립적인 형식으로 어떠한 한 시점을 나타내는 객체 Date.prototype.getTime() 은 특정 날짜를 밀리세컨드 숫자 값으로 반환. (1970년 1월 1일 00:00:00 UTC이후부터 해당) 1000*60*60*24 만큼 나누어준 이유는 밀리세컨드값에서부터 일자로 변환하기 위해서 1,000 * 60(초) * 60(분) * 24(시간)을 나누어 준 것. Hard Coded 1. 윤년구하기 2. 날짜를 1970년 1월 1일부터 일수의 합으로 바꾸기 3. 두 일수의 차이 구하기 윤년 알고리즘은 if 4로 딱 떨어지게 나눌 수 없으면 return 평년 e.. 더보기 자바스크립트 시작하기 JavaScript30 Challenge는 실제 웹페이지의 인터랙션을 Day 당 한 페이지씩 구현해보도록 구성되어있습니다. 무작정 코드를 따라치기보다는 기초문법을 정리하고 시작하는 편이 효율적 일 것 같아, 공부할 겸 본 포스트를 작성합니다. 대부분 MDN web documentation에 있는 내용을 정리한 것 입니다. 더 자세한 내용을 확인하려면 링크를 따라들어가 docs를 직접 확인하는 것도 좋습니다. 1. JavaScript는 주로 클라이언트 사이드에서 웹 페이지의 동적 인터랙션을 제공하기 위해 사용되는 *동적 프로그래밍 언어입니다. *동적 프로그래밍 언어는 컴파일 타임에 수행되는 작업을 런타임에 수행 할 수있는 프로그래밍 언어이다. 예를 들어 JavaScript에서는 프로그램이 실행되는 동안 변.. 더보기 이전 1 2 다음