일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 이분 검색
- 공변성
- Cypress
- 결정 알고리즘
- SSR
- 태그된 유니온
- RTK Query
- Promise
- 무한 스크롤
- Jest
- React
- 투포인터
- useAppDispatch
- tailwind
- ESlint
- app router
- recoil
- async/await
- TS
- CORS
- 호이스팅
- 리터럴 타입
- 반공변성
- webpack
- map
- CI/CD
- dfs
- autosize
- 인터섹션
- 타입 좁히기
- Today
- Total
목록코딩테스트 with JS/자바스크립트 알고리즘 문제풀이(인프런) (36)
짧은코딩
해결법 이 문제는 4중 for문을 사용해야 한다. 먼저 처음 2중 for문은 변수를 i, j의 초기값을 1로 두고 둘 다 학생 수까지 돌려야한다. 초기값을 1로 두는 이유는 i와 j가 등수로 사용되기 때문이다. 그리고 처음 2중 for문은 모든 경우의 수를 다 돌아가도록 한다. 그 다음 2중 for문은 각각 k, s로 변수를 두고 테스트 수, 학생 수로 돌려야한다. 이때 test[k][s]가 각각 i, j와 같으면 저장을 해두고 비교하면 된다. i가 멘토, j가 멘티라서 i가 j보다 작으면 count를 올려준다. 마지막에 이 count가 테스트 결과의 수와 같으면 answer++를 해주면 된다. 코드
해결법 -내 풀이 나는 몇 개가 중복되는지 체크하는 count 변수, 가장 최근에 어떤 문자가 나왔는지 저장하는 now 변수를 두고 문제를 풀었다. for 문으로 돌면서 만약 count가 0이면 answer에 문자를 추가하고 count, now를 갱신했다. 그리고 count가 0이 아니고 현재 문자가 가장 최근 문자와 같으면 count++를 했다. count가 1 초과면 또 다시 now, count, answer을 갱신했다. 마지막 if문을 안하면 'aaa'라는 문자를 입력했을 때, a만 나오기 때문에 이렇게 해줬다. 내 코드 강사님 해결법 우선 입력한 문자열 맨 뒤에 공백 문자를 추가한다. 그리고 처음 문자부터 (전체 길이 - 1)까지 반복한다. 왜냐하면 공백 문자를 추가했기 때문이다. 이러고 지금 문..
내 해결법 나는 indexOf를 이용해서 t의 위치를 다 구해줬다. 그리고 이중 반복문을 사용해서 거리를 구했다. 비효율적이라고 생각한다. 내 코드 강사님 풀이 큰 값을 하나두고 t값이 나오기 전까지 +1을 하다가 t값이 나오면 그 큰 값을 0으로 만든다. 그리고 이것을 오름차순, 내림차순으로 for문을 2번 사용하면 자연스럽게 가까운 값이 구해진다. 이때 2번째 for문에서는 둘 중에서 작은 값을 선택하면 된다. 강사님 코드 이렇게 p를 문자 최대 길이보다 크게 두고 문제를 해결하면 된다.
해결법 isNaN 함수를 활용해야한다. 반복문을 돌면서 isNaN 함수에 문자를 넣었을 때 false가 나오면 숫자이다. 따라서 ! 연산자를 이용해서 숫자를 answer에 넣어주면 된다. 코드
해결법 -내 생각(비효율적 + 틀림) 나는 문자를 반으로 잘라서 뒤에 자른 문자는 다시 뒤집어서 푸는걸 생각했다. 틀렸지만 여러 함수를 배웠으니 정리하려고 한다. 내 코드 정규 표현식을 사용했다. 그리고 문자열을 배열로 만들려면 Array.from(s) 이렇게 사용해야 한다. 해결법 -강사님 풀이 이걸 통째로 뒤집어서 원본과 비교한다. 내 풀이에 비해서 굉장이 단순하다. 강사님 풀이 정규 표현식은 a-z가 아닌 문자를 다 없앤다는 의미이다. 그리고 문자열에서 배열로 만든는 것도 split로 간단하게 했다.
해결법 -for문으로 해결 우선 대소문자 구별을 하지 않으니까 대문자나 소문자로 통일해야 한다. 그리고 for문으로 문자 길이의 절반만 돌면서 자기와 대칭되는 문자가 같은지 다른지 보면된다. 코드 -for문으로 해결 해결법 -함수로 푸는법 마찬가지로 먼저 대소문자 통일을 해야한다. 그리고 문자를 배열로 쪼개고 거꾸로 정렬을 하고 다시 문자열로 만들어주면 된다. 이때 join() 함수가 사용된다. -join() join 함수는 배열을 문자열로 만들어 줄 수 있다. const arr = ['바람', '비', '물']; console.log(arr.join()); // 바람,비,물 console.log(arr.join('')); // 바람비물 console.log(arr.join('-')); // 바람-비-물..
해결법 이 문제는 우선 입력된 점수 길이 만큼의 1로 이루어진 배열을 만들어야한다. 그리고 이중 for문을 두고 첫번째 for문 i를 기준으로 비교하면서 두번째 for문 j를 비교한다. i번째 있는 점수가 j번째 있는 점수보다 작으면 등수를 올려야해서 처음 만들 배열에 i 번째 위치를 +1을 해준다. 강사님 코드 Array.from을 사용하면 1을 n개 만큼 가진 배열을 쉽게 만들 수 있다.
해결법 사실 해결법은 간단하다. 하지만 난 일일히 비교해서 풀었다. 강사님 풀이에서는 A가 이기는 기준을 다 나열하고 아닌 경우 B 가 이긴 경우로 했다. 내 풀이 하나하나 다 경우의 수를 생각했다. 강사님 풀이 우선 비기는 경우와 A가 이기는 경우를 두고 else로 B가 이기는 경우를 했다.
indexOf let s = "abcabc" console.log(s.indexOf('a')); //0 a가 0번째 위치에 있어서 0이 나온다. 즉 indexOf는 원하는 문자를 문자열 중에서 가장 처음 위치에 있는 문자의 인덱스 번호를 찾아준다. let s = "abcabc" console.log(s.indexOf('a', 1)); //3 이렇게 두번째 매개변수도 넣어주면 그 숫자 이후부터 있는 문자를 찾아준다. 만약 찾는 숫자가 없으면 -1을 반환한다. 해결법 indexOf를 이용해서 문제를 풀면된다. for문을 돌리면서 문자 하나하나를 확인하는데 만약 중복되는 문자가 있다면 indexOf를 했을 때 자기의 인덱스 번호와 다를 것이다. 코드
substr() substr() 함수는 s.substr(start, length) 이렇게 하면 start부터 length 만큼 잘라서 반환해준다. const s = "abcdef"; console.log(s.substr(1, 3)); //bcd 이렇게 출력이 된다. substring() s.substring(start, end) 이렇게 사용한다. substring()는 시작 인덱스 번호부터 마지막 인덱스 번호를 가져와준다. const s = "abcdef"; console.log(s.substring(1, 3)); //bc 이렇게 출력이 된다. slice() substring() 함수와 사용법이 같다. s.slice(start, end) 이렇게 하면 된다. const s = "abcdef"; consol..