알고리즘
[알고리즘]가장 짧은 문자 거리
문제 한 개의 문자열 s와 문자 t가 주어지면 s의 각 문자가 s 내의 t와 떨어진 최소거리를 각각 출력하세요! 풀이 function solution(s, t) { let answer = []; let e = 1000; //정방향 탐색 for (let x of s) { if (x === t) { e = 0; answer.push(0); } else { e++; answer.push(e); } } e = 1000; //역방향 탐색 for (let i = s.length - 1; i >= 0; i--) { if (s[i] === t) e = 0; else { e++; answer[i] = Math.min(answer[i], e); } } return answer; } let str = 'teachermode..
[알고리즘]숫자만 추출하기
문제 숫자가 포함된 문자열에서 숫자만 출력하세요! 풀이 1 function solution(str) { str = str.toLowerCase().replace(/[a-z]/g, ""); //정규식으로 문자만 제거 return parseInt(str); } let str = "g0en2T0s8eSoft"; console.log(solution(str)); 풀이 2 function solution2(str) { let answer = ""; for (let x of str) { if (!isNaN(x)) answer += x; } return parseInt(answer); } console.log(solution2(str)); isNaN(x) : x가 NaN인지 판별
[알고리즘]2차원 배열의 사방 탐색
문제 n*n격자판에서 자신의 상하좌우 숫자보다 큰 숫자가 몇개 있는지 출력하세요! (격자의 가장자리는 0으로 초기화) 풀이 function solution(arr) { let answer = 0; let n = arr.length; let dx = [-1, 0, 1, 0]; let dy = [0, 1, 0, -1]; //사방탐색할 좌표 for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { let flag = 1; //돌기 전 flag값 초기화 for (let k = 0; k < 4; k++) { //4번만큼 돌며 사방탐색 let nx = i + dx[k]; //사방탐색 행의 위치 let ny = j + dy[k]; //사방탐색 열의 위치 if ( nx..
[알고리즘]격자판 최대 합 구하기
문제 2차원 배열의 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력하세요! 풀이 function solution(arr) { let answer = Number.MIN_SAFE_INTEGER; //answer는 비교 후 최댓값으로 업데이트 하기 위해 최솟값 정수로 초기화. let leng = arr.length; let sum1 = sum2 = 0; //각 행의 합, 열의 합이 될 sum1,2도 0으로 초기화하여 선언 for (let i = 0; i < leng; i++) { sum1 = sum2 = 0; //안쪽 for문이 돌기 전, 이전 기록 초기화. for (let j = 0; j < leng; j++) { sum1 += arr[i][j]; //행이 i번째 일 때 그 행의 원소 ..
[알고리즘] 배열 등수 구하기 (Array.from)
문제 배열 내 숫자의 순위를 입력 순서대로 출력하세요. 풀이 function solution(arr) { let n = arr.length; let answer = Array.from({ length: n }, () => 1); //1차원 배열 arr를 1로 초기화 for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { //배열의 i번째와 배열 전체를 돌아가며 비교하기 위해 2중 for문 사용 if (arr[i] < arr[j]) answer[i]++; //이번 턴에 비교중인 i가 j와 비교했을 때 작으면 순위가 밀리도록 배열 answer의 i번째를 누적. } } return answer; } let arr = [87, 89, 92, 100, 76]; ..
[알고리즘]중복 단어 제거 - 배열의 중복 제거 (filter, indexOf)
문제 배열 내의 중복을 제거하고 리턴하세요. 풀이 1 function solution(s){ let answer = []; for(let i = 0; i s.indexOf(x)===index); } let str=["good", "time", "good", "time", "student"]; solution(str);// ["good","time","student"] filter 콜백함수의 매개변수는 각 배열의 값과 그 인덱스 넘버. 풀이 3 function solution(s){ let answer = [...new Set(s)]; } let str=["good", "time", "good", "time", "student"]; solution(str);// ["good","time","student"..
[알고리즘] 중복 문자 제거 - indexOf, Set
문제 입력된 문자열의 중복을 제거하여 리턴하세요. 제거된 문자열의 순서는 원래 순서를 유지합니다. 풀이 1 (indexOf 사용) function solution(s){ let answer = ''; for(let i = 0; i < s.length; i++) { if(s.indexOf(s[i])===i) answer += s[i]; } return answer; } solution("ksekkset"); //kset; s.indexOf('a') : s문자열에서 'a'의 위치를 반환한다. 없다면 -1을 반환한다. s.indexOf('a',1) : s문자열에서 'a'를 1번째 인덱스 부터 찾는다. (그 이전의 인덱스는 무시한다.) if(s.indexOf(s[i])===i) : indexOf는 찾고있는 문자..
[알고리즘]일곱 난쟁이 - 이중 for문으로 특정 요소 구하기
문제 9개 요소가 있는 배열이 있습니다. 이 배열의 7개의 합이 100일 때, 100을 이루는 7개의 요소를 구하세요. function solution(arr) { let answer = arr; let sum = arr.reduce((a, b) => a + b, 0); //reduce로 배열의 합을 구한다. for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { //이중for문으로 배열 중 두 요소를 경우의 수로 묶는다. if (sum - (arr[i] + arr[j]) === 100) { //sum에서 인덱스 i,j의 값을 더한 값이 100이면 이 때의 i,j가 탈락해야함. arr.splice(j, 1); ar..
[알고리즘]10부제 - 일의 자리 숫자 비교
문제 자동차 번호 2자리 중 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하는지 여부를 파악하고 그 수량을 파악하세요. function solution(day, arr) { let answer = []; for (let x of arr) { if (x % 10 === day) answer.push(x); } return answer.length; } arr = [25, 23, 11, 47, 53, 17, 33]; console.log(solution(3, arr)); 일의 자리 숫자는 특정 숫자를 10으로 나눈 나머지.
[알고리즘]배열의 최솟값 (for 문)
function solution(arr) { let answer, min = Number.MAX_SAFE_INTEGER; for (let i = 0; i < arr.length; i++) { if (arr[i] < min) min = arr[i]; } answer = min; return answer; } let arr = [5, 7, 1, 3, 2, 9, 11]; console.log(solution(arr)); for문을 사용해 배열 내의 최소값을 찾을 수 있다. min이라는 임의의 숫자(배열 내 최대 숫자 혹은, Number.MAX_SAFE_INTEGER를 사용해 안정적인 큰 숫자를 만든다. (이후 배열 내의 가장 작은 값을 찾아내며 비교한다.) 처음 for문이 돌 때, 배열 내의 임의의 요소(i번..