Algorithm(Javascript) (14) 리스트형 알고리즘 문제 6 로마 문자열을 받으면 숫자로 바꿔주는 문제이다. 일단 문자열에 따른 숫자를 대칭시켜주는걸 객체로 관리를 해줘야된다. 로마 문자열을 숫자로 읽는법은 왼쪽부터 차례대로 더해주는데 대신 조건은 앞에 있는 문자가 뒤에 있는 문자보다 크거나 같을때 더해주는거다. 만약 만약에 있는 문자가 뒤에 있는 문자보다 작다면 그 문자열의 값은 빼줘야 된다. function romanToNum(s) { const numberSymbol = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000, } const box = s.split(''); let num = 0; for (let i=0; i 알고리즘 문제 5 배열에 들어가있는 문자열들에서 공통으로 시작되는 단어를 추출하는 문제이다. 처음에 내가 구현하려는 방법은 배열에 0번 인덱스에 들어가있는 단어들을 for..of문으로 작성을한 후 그 단어들이 같은 인덱스 순서에 존재하는지 단어 하나하나 다 검사하는 로직으로 풀려고 했다. for(let value of strs[0]) { for(let i=1, i { let prefix = strs[0]; if(strs.length === 0){ prefix = ""; } for(let i=1; i 알고리즘 문제 4 인자로 들어온 숫자가 뒤집었을때랑 같은지 판별하는 문제이다. 이 문제에서 가장 먼저 생각해야할 것은 음수가 들어왔을때 바로 false를 리턴해주는거다. 1. 풀이 1 양수일때는 숫자를 문자열로 타입을 변환한뒤 하나는 split으로 순서대로 나열 하나는 reverse()를 이용해서 뒤집어서 나열한다. 근데 바로 numArr === revNumArr을 비교해서 판별하면 더 쉬울텐데 그렇게 못하는 이유는 자바스크립트에서 배열을 비교하면 배열에 들어가있는 값들이 같은지 확인하는게 아니라 배열이 할당된 변수의 메모리 주소를 비교한다. 그래서 값을 확인하기위해서는 for문을 통해서 각자 인덱스에 접근해서 맞는지 비교해야된다. 반복문을 돌면서 바로 값이 다르면 false를 반환하고 함수를 끝내고 만약 둘의 배열값들이.. 알고리즘 문제 3 중복된 알파벳이 없는 가장 긴 단어를 반환하는 문제다. 처음에는 예를 들어서 입력된 단어가 'abcdabc'이면 중복된 알파벳 없는 단어를 하나의 배열에 전부 다 담아서 그 값들 중에서 길이가 긴 값을 반환하려고 했다. 너무 비효율적이고 중간에 오류도 많이나서 포기했다. 모범 답안은 빈 배열에다가 문자열 요소를 하나씩 추가하다가 중복된 단어가 배열에 존재하면 중복된 단어 앞에서부터 배열을 slice를 한후 다시 추가하는 방식으로 풀이하는게 가장 깔끔하다는걸 검색해서 찾았다. const getLengthOfStr = str => { let sliceStr = []; let lastStr = 0; for (let i = 0; i 알고리즘 문제 2 숫자를 하나 받아서 뒤집어진 숫자를 반환하는 문제이다. 1. 나머지 몫으로 풀이 코드를 처음부터 설명하자면 x라는 인자로 숫자를 받아서 만약 0이라면 바로 0을 반환하는 조건문을 넣어준다. 0이외의 숫자가 들어오면 밑에 코드들이 실행된다. while문을 통해서 0보다 클때까지만 코드블럭있는 코드들을 실행시켜준다. 먼저 res라는 변수에다가 x를 10으로 나누고 나머지를 더해준다. 그리고 x에다가 자기 자신을 10으로 나누고 난 몫을 할당해준다. parseInt()는 안에 있는값을 정수로 만들어준다. 만약 x의 값이 5678이라면 value에다가는 할당된 원래 값에다가 10을 곱하고 10으로 나눈 나머지 즉 8을 더해준다. 처음에는 value에는 0이 할당되어있기때문에 그대로 8이다. 그 다음 567에서 .. 알고리즘 문제 1 주어진 배열에서 target이 나올 수 있는 숫자 두개의 조합을 구해야하는 문제다. 1. 2중 for문 const twoSum = (nums, target) => { for(let i=0; i 이전 1 2 다음