본문 바로가기
관리자

Computer Science

(59)
Prm 6 : Sudoku / parseInt, [...Array().keys()].slice() sudoku 문제 스도쿠는 숫자 퍼즐로, 가로 9칸, 세로 9칸으로 이루어져 있는 표에 1부터 9까지의 숫자를 채워 넣는 퍼즐입니다. 퍼즐을 푸는 방법은 아홉 가로줄, 세로줄, 3X3 칸에 1에서 9까지의 숫자를 중복되지 않게 한 번씩만 넣으면 됩니다. 일부 칸이 비어있는 상태인 스도쿠 보드를 입력받아 스도쿠 퍼즐이 완성된 보드를 리턴해야 합니다. 입력 인자 1 : board 가로 길이(board[i].length)와 세로 길이(board.length)가 모두 9인 2차원 배열 matrix[i][j]는 1 이상 9 이하의 자연수 출력 가로와 세로의 길이가 모두 9인 2차원 배열을 리턴해야 합니다. 주의사항 입력으로 주어지는 board를 직접 수정해도 상관없습니다. 입력으로 주어지는 board 가지고 완성..
BubbleSort 문제 BubbleSort를 .sort 메소드를 쓰지말고 직접 구현해보는 문제. 배울점 1. bubbleSort 자체가 두 값을 비교하여 큰 값을 뒤로 보내는 방식이다. 2. bubbleSort가 1회 실행되면, 리스트에서 가장 큰 값은 리스트의 제일 뒤쪽으로 가게 되며 이것은 1개의 값이 정렬된 것이라고 볼 수 있다. ex) [3, 4, 5, 9, 1, 2]와 같이 제일 큰 수 9가 애매한 위치에 있더라도 두 값의 위치를 바꾸는 것을 순차적으로 진행하면 9가 리스트의 맨 끝에 오게됨을 알 수 있다. 3. 최적화를 위해 6번줄에서와 같이 len - 1 - i를 반복문의 범위로 준다. 즉, 맨 뒤쪽의 정렬된 큰 값들은 신경쓰지 않도록 한다. 4. 2개의 값을 바꾸는 로직은 9번줄과 같이 ES6의 구조분해할당..
Prm 3 : Subset isSubsetOf 문제 두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴해야 합니다. 입력 인자 1 : base number 타입을 요소로 갖는 임의의 배열 (base.length false base = [10, 99, 123, 7]; sample = [11, 100, 99, 123]; output = isSubsetOf(base, sample); console.log(output); // --> false Advanced 시간 복잡도를 개선하여, Advanced 테스트 케이스(base, sample의 길이가 70,000 이상)를 통과해 보세요. 풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ..
Prm 2 : fibonacci fibonacci 문제 아래와 같이 정의된 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 입력 인자 1 : n number 타입의 n (n은 0 이상의 정수) 출력 number 타입을 리턴해야합니다. 주의사항 재귀함수를 이용해 구현해야 합니다. 반복문(for, while) 사용은 금지됩니다. 함수 fibonacci가 반드시 재귀함수일 필요는 없습니다. 입출력 예시 let output = fibonacci(0); console.log(output); // --> 0 output = ..
Prm 1 : permutation rockPaperScissors 문제 가위바위보 게임은 2인 이상의 사람이 동시에 '가위, 바위, 보'를 외치고 동시에 가위, 바위 또는 보 중에서 한 가지를 의미하는 손 모양을 내밀어 승부를 결정짓는 게임이다. 세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있습니다. 세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성합니다. 입력 없음 출력 2차원 배열(arr[i])을 리턴해야 합니다. arr[i]는 전체 경우의 수 중 한 가지 경우(총 세 번의 선택)를 의미하는 배열입니다. arr[i]는 'rock', 'paper', 'scissors' 중 한 가지 이상을 요소로 갖는 배열입니다. arr[i].length는 3입니다. 주의사항 최종적으로 리..
[프로그래머스] [Lv. 1](matrix)카카오 크레인 인형뽑기 게임 문제 이해 N x N 행렬 board와 인형뽑는 위치 moves 리스트가 주어지고, 숫자로 표현된 인형들이 board 내부에 입력되어 있다. moves 리스트에 적힌 인덱스 값에 따라 인형을 bucket에 넣는데, 만약 bucket에 같은 값의 인형이 있다면 인형이 제거되고 최종 answer 값이 +2가 된다. 풀면서 배운 것 for문 중첩 시, 하나의 for문을 특정조건에서 끝내는 형태로 쓸려면 break이나 continue를 해줘야 한다. forEach 문을 써서 풀었는데, forEach 문은 break가 안된다는 것을 배웠다. 답보고 배운 것 -transpose, ||, && 연산자, reduce, map 메서드 transpose는 전치행렬이고, N x M 행렬을 M x N 으로 바꿔준 것이다. 나..
Auth / 세션, 쿠키, 토큰 개요 1. 세션, 쿠키가 필요한 이유 우리가 통신에서 가장 많이 쓰고 있는 http 방식은 stateless 속성을 갖는다. 이것은 클라이언트와 서버가 한번의 요청-응답 과정을 거친 후 연결을 끊게되며, 이전 통신에 대한 정보를 전혀 갖지 않게된다. 다시 말해, 다음 번의 통신때는 이전 통신에 의한 정보가 없다는 것이다. 클라이언트(유저)가 서버에 요청을 보낼 때, Header 부분에 유저에 대한 정보를 포함시키고, Body부분에 요청내용을 포함시켜서 보낸다. 특정 유저의 정보를 전달해주기 위해서 서버는 유저를 구분해야된다. 그렇기 때문에 인증(Auth)이 필요한 것이다. Header에 유저의 ID와 PW를 담아서 보내면 인증이 되겠지만, 이렇게 하면 보안에 매우 취약하게 된다. 또한 서버에서 매 신호마다 유..
Auth / Authentication vs Authorization(인증과 인가의 차이) Authentication & Authorization 구분 Authentication(인증) : 각 유저가 누구인지 구분하는 과정 Authorization(인가, 권한) : 인증된 유저에게 특정 리소스에 대한 접근 권한을 부여하는 과정 Authentication(인증) 인증은 주로 아이디와 비밀번호, One-time pins, Authentication apps(인증앱), Biometrics(생체인증) 방식을 통해 진행되며 ID/PW 방식이 가장 일반적이고 많이 쓰인다. 보안의 강도를 높이기 위해서는 여러가지 방식을 중첩하는 것이 효과적이다. Authorization(권한) 권한은 인증 후에 진행되는 절차로, 각 유저가 인증 후에 접속한 곳에서 가질 수 있는 권한을 부여하는 것이다. 인증의 ID/PW가..