선택 정렬을 이용해 배열 내 요소들을 정렬하기
function selectionSort(arr){
for (let i=0; i<arr.length-1; i++){
let minIdx;
for (let j=i+1; j<arr.length; j++){
if ((arr[i]>arr[j] && typeof minIdx === 'undefined')||(arr[minIdx] > arr[j] && typeof minIdx === 'number')){
minIdx = j;
}
}
if (typeof minIdx !== 'undefined'){
let curr = arr[i];
arr[i]=arr[minIdx];
arr[minIdx] = curr;
}
}
return arr;
}
여러 시도 끝에 일단 선택 정렬의 방식처럼 작동하도록 코드는 짰다.
function selectionSort(array) {
let n = array.length; // 루프 카운트!
// 이번에는 i ~ n - 2까지 돌면서 실험군을 선택해요!
for (let i = 0; i < n - 1; i++) {
let minIndex = i; // i번째에 들어갈 최소값을 찾아요!
for (let j = i + 1; j < n; j++) {
// 현재 최소값으로 설정된 친구보다 더 작은 친구를 발견하면!
if (array[j] < array[minIndex]) {
minIndex = j; // 최소값 인덱스를 갱신합니다!
}
}
// i번째에 최소값 인덱스에 있는 값을 넣어줍니다!
let temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
return array;
}
정답이라고 되어있는 코드와 내 코드를 비교해보니, 내가 너무 힘들게 코드를 짰다는 것을 깨달았다.
내 코드를 기준으로 minIdx에 i를 적용시켜주기만 했다면 굳이 해당 변수 타입이 undefined인지 비교를 할 필요도 없었고 간단해지는 것...
minIdx가 i라면, 특별히 변경값이 없을 때 arr[minIdx]를 arr[i]로 설정해줄 때도 문제가 없는 것이다.
확실히 이런 잘 정리된 코드를 계속해서 보면서, 코딩의 구조에 대한 훈련을 해야겠다고 느꼈다.
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
function solution(s) {
let num = Math.floor(s.length/2);
let result = '';
if (s.length % 2 === 0){
return result += (s[num-1]+s[num]);
} else {
return result += s[num];
}
}
가운데 인덱스를 Math.floor() 메서드를 사용해서 가져오는 방법으로 해결했다.
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
function solution(n) {
let result = '';
for (let i=0; i<n; i++){
if(i%2===0){
result += "수";
} else {
result += "박";
}
}
return result;
}
짝수일 경우 2로 나눴을 때 나머지 값이 0인 점을 이용해 간단히 문제를 해결했다.
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
function solution(a, b) {
let result = 0;
for (let i=0; i<a.length; i++){
result += a[i]*b[i];
}
return result;
}
문제가 간단하여 반복문으로 쉽게 해결했다.
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
function solution(left, right) {
let result = 0;
for (let i=left; i<=right; i++){
let num = 0;
for (let j=0; j<=i; j++){
if (i%j === 0){
num++;
}
}
if (num % 2 === 0){
result += i;
} else {
result -= i;
}
}
return result;
}
이중 반복문으로 각 숫자마다 약수를 찾고 약수가 짝수일 시 더해주고 홀수일 시 빼줌으로 문제를 해결했다.