Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이
[알고리즘]가장 짧은 문자 거리
문제 한 개의 문자열 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 of문으로 x가 소문자인지 여부 체크, 소문자이면 대문자로 변환하여 answer에 더해준다. function solution(s) { let answer = ""; for (let x of s) { if (x === x.toLowerCase()) { answer += x.toUpperCase(); } else answer += x; } return answer; } let str = "It is Time To Study"; console.log(solution(str)); x를 아스키 코드로 변환 대문자 : 65~90 소문자 : 97~122 function solution(s) { let an..
[알고리즘]문자 찾기 - 문자열에 특정 문자가 몇 개 있는지?(split)
문제 "COMPUTERPROGRAMMING" 문자열에 "R"이 몇 개 들어갈까요? function solution(s, t) { let answer = s.split(t); answer = answer.length - 1; return answer; } let str = "COMPUTERPROGRAMMING"; console.log(solution(str, "R")); split(t)는 "R"을 기준점으로 문자열을 나누고, 이 length는 구분된 문자열의 갯수. 문자열의 갯수 -1 만큼 기준점이 존재한다.
[알고리즘] A를 #으로 - 특정 문자열 치환 (replaceAll)
문제 단어 "BANANA"에 포함된 "A" 를 "#"으로 바꿔 출력하세요. function solution(s) { let answer = s.replaceAll(/A/g, "#"); return answer; } let str = "BANANA"; console.log(solution(str)); function solution2(s) { let answer = ""; for (let x of s) { if (x === "A") answer += "#"; else answer += x; } return answer; } console.log(solution2(str));