Lsiron
코딩테스트 3(findIndex, reduce, push) 본문
문제 1. x만큼 간격이 있는 n개의 숫자.
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
풀이=해답.
=> 빈 배열 sum을 선언 해 준뒤, 배열의 요소들의 총 개수는 n개 이므로 반복문을 통해 빈 배열에 x*i를 넣었다.
// 자연수 n을 배열의 length로 보는 판단이 중요했다. 이를 시작으로, x에 i값을 곱해주는 반복문을 만들었고, 빈 배열에 집어넣을 수 있었다.
문제 2. 나머지가 1이 되는 수 찾기
자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.
풀이.
해답.
=> n 을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수는 즉 n-1 을 x로 나눴을때 나머지가 0이 되는 자연수중 가장 작은것이라 생각하여, 빈 배열을 만들어놓고 이중 가장 첫번째로 삽입되는 자연수를 반환하도록 하였다.
// 해답엔 여러가지가 있었다. 아예 x를 파라미터로 넣고 x값에 대해 풀어나가는 등.. 대표적인 해답으로는 어차피 가장 첫번째 순서로 출력되는것을 반환하도록 하면 되는것이기 때문에 반복문을 사용하여 n을 i로 나눴을때 나머지가 1이 되도록 하는 첫번째 i를 반환하는 것 이었다. 이 문제는 출력되는 순서를 미처 생각하지 못 했기 때문에 시간이 더 오래걸렸다.
문제 3. 짝수와 홀수
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
풀이 = 해답.
=> b가 a와 같거나 큰 경우와, b가 작은 경우를 나누어서 반복문을 만들었다. 초기값을 a, 마지막값을 b로 설정해 놓은뒤 빈 변수에 더해주면 바로 구할 수 있는 문제다.
// 굳이 더 간단하게 표현하자면 저렇게 if와 else만으로 끝나는 문제는 삼항연산자로 해도 된다. 짝수와 홀수 구하는 문제는 코테 초기때 조건문을 쓰던게 버릇이 되었기 때문에 자동으로 조건문이 나오게 되었다. 짧은건 삼항연산자로 하는 버릇을 들여야 겠다.
문제 4. 서울에서 김서방 찾기
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
풀이 = 해답.
=> x가 "Kim" 이 있는 요소의 index 값이라고 생각했기 때문에 findIndex(x) 내장객체를 통해 index값을 찾아주었다. 위와 같이 함수 형태로 집어넣으면 해당 값의 인덱스를 출력한다.
// findeIndex() 함수를 알고있으면 쉽게 풀 수 있는 문제였다. indexOf("Kim") 을 통해 바로 인덱스 값을 찾을수도 있지만 현대식(ES6)에서는 findIndex() 함수를 더 선호한다고 한다.
만약 내장객체를 몰랐다면 아래와 같이 for 문을 통해 "Kim" 과 같은 인덱스를 가진 값일 경우에 반환한다. 로 풀었을 것이다.
문제 5. 음양 더하기
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
풀이 = 해답.
=> 빈 배열을 만들어 준 뒤에 반복문을 통해 absolute와 signs 배열을 비교했고, 조건문을 통해 연산처리 및 빈배열에 요소를 추가했다. 마지막으로 빈 배열 요소들의 합을 reduce() 함수를 통해 구해주었다.
// 사실 총합 값만 추출하면 되니, 굳이 빈배열 선언을 해주고 reduce() 함수로 모든 요소를 합 해줄 필요없이 그냥 빈 변수에 조건문을 통해 숫자를 더해주기만 해도 되고 forEach()함수를 통해 합 연산처리를 한 후 더한 값을 출력하면 됐었다.
다음엔 배열을 반환해야하는지, 배열에서 연산처리 한 값을 반환해야 하는지 잘 확인해야겠다.
하루 총평.
예전에는 한 문제를 풀기도 벅찼었다. 허나 지금은 문제를 푼 뒤에, 아 이렇게 풀었으면 더 괜찮고 속도도 빨랐을텐데 하는 생각이 든다. 자바스크립트 실력이 눈에 띄게 늘어난 시점이 코딩테스트를 시작하고나서 인 것 같다. 이 때부터 내장함수 사용법 및 머릿속으로 그려보기에 익숙해지기 시작했다.
좀 더 연습하고 복습을 해서, 문제 풀이 속도 및, 최상의 해결책을 찾도록 노력해야겠다.