🧬알고리즘77 [JavaScript] [1차] 다트 게임 - 2018 카카오 블라인드 코딩 테스트 문제카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.다트 게임은 총 3번의 기회로 구성된다.각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다.옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각.. 🧬알고리즘/Programmers 2024. 8. 22. [JavaScript] [1차] 비밀지도 - 2018 카카오 블라인드 코딩 테스트 문제네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다.전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 한다.지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다.지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다."지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다.암호화된 배열은 지도의 각 가로줄에서 벽 부분.. 🧬알고리즘/Programmers 2024. 8. 22. [JavaScript] x만큼의 간격이 있는 n개의 숫자 문제정수 x와 자연수 n이 매개변수로 주어진다. x부터 시작해 x씩 증가하는 숫자를 n개 지닌 배열을 반환하는 함수를 작성하라. 예시xnreturn25[2, 4, 6, 8, 10]43[4, 8, 12]-42[-4, -8] 나의 풀이function solution(x, n) { const result = []; for (let i = 1; i 다른 풀이function solution(x, n) { return Array(n).fill(x).map((v, i) => (i + 1) * v)} 풀이 방법먼저 문제에서 n번 반복해야 된다는 조건에 for문을 사용하기로 했다. 빈 배열을 하나 생성해주고 for문을 사용해서 i의 값을 1씩 증가시키면서 x * i 값을 빈 배열에 넣어주고 .. 🧬알고리즘/Programmers 2024. 8. 21. [JavaScript] 행렬의 덧셈 문제행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 된다. 2개의 행렬 arr1과 arr2가 매개변수로 주어질 때, 행렬 덧셈의 결과를 반환하는 함수를 작성하라. 예시arr1arr2return[[1, 2], [2, 3]][[3, 4], [5, 6]][[4, 6], [7, 9]][[1], [2]][[3], [4]][[4], [6]] 나의 풀이const solution = (arr1, arr2) => arr1.map((arr, i) => arr.map((v, j) => v + arr2[i][j])); 풀이 방법먼저 이차원 배열이 주어진 것을 보고 이중 for문을 사용해야겠다고 생각했다. 하지만 for문을 두 번 사용하면 코드가 길어져서 가독성이 떨어질 것 같.. 🧬알고리즘/Programmers 2024. 8. 21. [JavaScript] 핸드폰 번호 가리기 문제프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가린다. 전화번호가 문자열 phone_number로 주어질 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 반환하는 함수를 작성하라. 예시phone_numberreturn01033334444*******4444027778888*****8888 나의 풀이const solution = (phone_number) => '*'.repeat(phone_number.length - 4) + phone_number.substring(phone_number.length - 4); 다른 풀이function hide_numbers(s){ return s.replace(/\d(?=\d{4})/g, .. 🧬알고리즘/Programmers 2024. 8. 21. [JavaScript] 제일 작은 수 제거하기 문제정수를 저장한 배열 arr에서 가장 작은 수를 제거한 배열을 반환하는 함수를 작성하라. 단, 반 하려는 배열이 빈 배열인 경우엔 [-1]을 반환한다. 조건 • arr는 길이 1 이상인 배열이다. • 인덱스 i, j에 대해 i != j면, arr[i] != arr[j]이다. 예시arrreturn[4, 3, 2, 1][4, 3, 2][10][-1] 나의 풀이function solution(arr) { const min = arr.indexOf(Math.min(...arr)); arr.splice(min, 1); return arr.length ? arr : [-1];} 풀이 방법먼저 indexOf()와 Math.min() 함수를 사용해서 제일 작은 값의 index를 구해온다. .. 🧬알고리즘/Programmers 2024. 8. 20. [JavaScript] 정수 제곱근 판별 문제임의의 양수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려고 한다. n이 양의 정수 x의 제곱근이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱근이 아니라면 -1을 리턴하는 함수를 작성하라. 예시nreturn1211443-1 나의 풀이const solution = n => Math.sqrt(n) % 1 === 0 ? Math.pow(Math.sqrt(n)+1, 2) : -1; 풀이 방법먼저 Math.sqrt() 함수를 사용해서 제곱근인지 아닌지 판단한다. 제곱근이라면 양의 정수 값을 반환하고, 제곱근이 아니라면 실수 값이 반환된다. 만약 1로 나눈 나머지가 0이라면 해당 정수가 제곱근이라고 판단한다. x가 양의 정수 n의 제곱근이라면 Math.pow()와 Math... 🧬알고리즘/Programmers 2024. 8. 20. [JavaScript] 자연수 뒤집어 배열로 만들기 문제자연수 n이 매개변수로 주어진다. n을 뒤집어 각 자리 숫자를 원소로 가지는 배열을 반환하는 함수를 작성하라. 예시nresult12345[5, 4, 3, 2, 1] 나의 풀이const solution = n => (n+"").split("").map(v => +v).reverse(); 다른 풀이function solution(n) { var arr = []; do { arr.push(n%10); n = Math.floor(n/10); } while (n>0); return arr;} 풀이 방법먼저 (n+"")를 사용해 자연수 n을 문자열로 바꿔주고 split() 함수를 사용해 각 자리를 원소로 하는 배열을 만들었다. 그리고 map() 함수를 사용해서 각 원소를 숫자로 변환한 .. 🧬알고리즘/Programmers 2024. 8. 19. [JavaScript] 자릿수 더하기 문제자연수 n이 매개변수로 주어진다. 자연수 n의 각 자릿수를 더한 합을 구해서 반환하는 함수를 작성하라. 예시nresult123698724 나의 풀이function solution(n) { let sum = 0; n.toString().split("").map((v) => sum += +v); return sum;} 다른 풀이function solution(n){ return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0);} 풀이 방법먼저 주어진 정수 n을 toString() 함수를 사용해서 문자열로 바꿔준다. 그리고 split() 함수를 사용해서 각 자릿수를 원소로 하는 배열로 변환한다. sum 변수에 각.. 🧬알고리즘/Programmers 2024. 8. 19. [JavaScript] 시저 암호 문제어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 한다. 문자열 s와 거리 n을 매개변수로 주어질 때, s를 n만큼 민 암호문을 만드는 함수를 작성하라. 조건 • 공백은 아무리 밀어도 공백이다. • "z"를 1만큼 밀면 "a"가 된다. • 문자열 s는 대문자, 소문자, 공백으로만 이루어져 있다. • s의 길이는 8000 이하이다. • n은 1이상, 25이하인 자연수이다. 예시s (문자열)n (길이)result"AB"1"BC""z"1"a""a B z" 나의 풀이function solution(s, n) { const lower = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz".spli.. 🧬알고리즘/Programmers 2024. 8. 19. [JavaScript] 문자열 다루기 기본 문제문자열 s의 길이가 4 또는 6이고, 숫자로만 구성되어 있는지 확인하는 함수를 작성하라. 예를 들어 "a234"이면 false, "1234"이면 true를 리턴하면 된다. 나의 풀이const solution = s => (s.length === 4 || s.length === 6) && !s.split("").map(v => +v).includes(NaN); 다른 풀이function alpha_string46(s){ var regex = /^\d{6}$|^\d{4}$/; return regex.test(s);} 풀이 방법먼저 정규식을 사용하는 방법을 생각했지만 정규식 사용이 아직 미숙해서 다른 방법을 생각했다. 먼저 split() 함수를 사용해 각 문자를 원소로 하는 배열로 변환해줬다. 그리.. 🧬알고리즘/Programmers 2024. 8. 16. [JavaScript] 문자열 내 마음대로 정렬하기 문제문자열로 구성된 배열 strings와 정수 n이 매개변수로 주어진다. 각 문자열의 n번째 인덱스 글자를 기준으로 오름차순 정렬한 배열을 리턴하는 함수를 작성하라. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치한다. 모든 strings의 원소는 소문자 알파벳으로 이루어져 있다. 예시stringsnreturn["sun", "bed", "car"]1["car", "bed", "sun"]["abce", "abcd", "cdx"]2["abcd", "abce", "cdx"] 1번 문자열 ["sun", "bed", "car"]에서 n번째 인덱스의 문자는 ["u", "e", "a"]이기 때문에 ["car", "bed", "sun"]가 리턴된다. 2번 문자열에서는 "abce.. 🧬알고리즘/Programmers 2024. 8. 13. 이전 1 2 3 4 5 6 7 다음