TIL 004
✏️ 24.12.30 To do list
- 프로그래머스 코딩테스트 Lv.0 5개
- 실전 알고리즘 강의
- 웹개발종합 강의 복습
- Git 복습 3번째
- Javacript 문법 종합반 1주차 1-1 ~ 1-5
오늘 배운 것들
- Javascript 반복문 응용 방법
- 알고리즘 개념
- 선택 정렬
오늘 학습한 내용
01 알고리즘
알고리즘이란?
문제를 해결하는 절차
- 논리이며 수학이고 실질적인 개발에 적용되는 기초적인 아이디어
- 알고리즘 분석을 통해 좋고 나쁨을 평가할 수 있음
- 컴퓨터에게는 구체적으로 과정을 명시해서 전달해줘야 함
📌 5가지 조건
입력, 출력, 유한성, 명백성, 효과성
알고리즘은 어디에 쓰이는가
개발의 전체 과정에 사용함
02 선택 정렬
'가장 작은 것을 골라서 제일 앞으로 보내기'
const array = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]
1. 배열 index 0번째의 값과 그 다음 index의 값을 비교한다
2. 더 작은 값을 index 0번째로 설정한다
해결 방안 코드
📌 array.sort() 함수 = 오름차순 정렬
const array = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9];
array.sort();
console.log(array);
숫자 배열일 경우 사용해야 하는 코드
why? 바로 정렬하기 전에 배열의 값을 내부적으로 문자열로 변환하기 때문에
const array = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9];
array.sort((a, b) => a - b);
console.log(array);
a-b가 음수면 a가 b보다 먼저 옴
a-b가 양수면 b가 a보다 먼저 옴
a-b가 0이면 a와 b의 순서를 유지함
문제 - 해결 과정
01 짝수의 합
문제
정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
문제 상황
어떻게 하면 되겠다라는 구조는 머릿속에 그려지지만, 그것을 코드로 구현시키는 것이 어려웠다
구조까지만 생각하고 이를 실현시키는 코드는 바로 구글 검색을 통해 확인하였다
✏️ 내가 생각한 구조
1. n에서 나누기 2를 해서 짝수들만 골라낸다
2. 골라낸 짝수들을 모아서 합친다
해결 방법
function solution(n) {
let answer = 0;
for (let i=0; i<=n; i++) {
if (i%2===0) {
answer += i;
}
}
return answer
}
다른 해결 방법
🌟 반복 횟수 줄이기
function solution(n) {
var answer = 0;
for(let i=2 ; i<=n ; i+=2) {
answer += i;
}
return answer;
}
🌟 수열 공식 이용
function solution(n) {
var half = Math.floor(n/2);
return half*(half+1);
}
02 배열 뒤집기
문제
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.
문제 상황
구조는 그려지지만 코드를 어떻게 작성해야되는지 모르는 상태였다
✏️ 내가 생각한 구조
1. 기존의 배열 원소를 뒤에서부터 꺼낸다
2. 새로운 배열을 만들어서 거기서 새로 넣는다
해결 방법
function solution(num_list) {
const reverse = []
for (let i = num_list.length-1; i >= 0; i--) {
reverse.push(num_list[i]);
}
return reverse
}
다른 해결 방법
🌟 reverse 함수
function solution(num_list) {
return num_list.reverse()
}
느낀 점
코딩테스트 문제 난이도 0에서부터 막힌다는 사실을 알고 충격에 빠졌다. 코드를 구현하지는 못하더라도 문제를 어떻게 해결할 것인지 논리적인 구조를 짜는 연습을 하였다. 어떻게 해야되는지 모르겠다고 바로 해결방법을 보는 것보다 조금이라도 시간을 들여 내가 생각한 해결방법을 생각하는 것이 도움이 된다는 것을 깨달았다.
문제를 풀다보면 내가 어떤 부분의 개념이 부족하다는 것을 알 수 있어서 좋았다. 오늘 코딩테스트를 풀어보면서 알고리즘에 대한 개념, 반복문 활용 능력이 부족한 것 같아서 해당 부분을 학습하였다.