인프런에 JavaScript로 알고리즘을 공부할 수 있는 강의가 있어 들어보려고 한다.
자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비) /인프런/김태원강사님
자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비) - 인프런 | 강의
자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., 개발
www.inflearn.com
오늘은 section 1의 1번부터 5번까지의 문제를 풀이하였다.
앞으로 이 게시판에 알고리즘 문제의 로직을 간단히 정리하려고 한다.
section1 - #1. 3개의 숫자 중 최솟값 구하기
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(a, b, c){
let answer;
if(a>b) answer = b;
else answer = a;
if (answer>c) answer=c;
return answer;
}
console.log(solution(6, 5, 11));
</script>
</body>
</html>
Input : 6, 5, 11
Output : 5
코드 풀이 :
1. 3개의 숫자 중 2개의 숫자 먼저 크기를 비교
2. 2개의 숫자 중 더 작은 숫자와 마지막 숫자의 크기를 비교
section1 - #2. 삼각형을 구성할 수 있는가
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(a, b, c){
let answer, max;
let total = a+b+c;
if(a>b) {max = a;}
else {max = b;}
if(max<c) {max = c;}
answer = (total-max)>=max ? "YES" : "NO";
return answer;
}
console.log(solution(13, 33, 17));
</script>
</body>
</html>
Input : 13, 33, 17
Output : NO
코드풀이 :
* 삼각형의 조건 - 삼각형의 가장 긴변은 나머지 두변의 합보다 작아야 한다.
1. total이라는 변수에 입력받은 3개의 값의 합을 할당
2. 3개의 숫자 중 2개의 숫자를 먼저 비교하여 큰 값을 구함
3. 비교하여 나온 큰 값과 마지막 숫자를 비교하여 가장 큰값(max)을 구함
4. max와 나머지 두변의 길이의 합(total - max)을 비교하여 삼각형의 조건을 만족하는지 평가.
section1 - #3. 연필 몇 다스가 필요한가?
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(n){
let answer=Math.ceil(n/12);
return answer;
}
console.log(solution(25));
</script>
</body>
</html>
Input : 25
Output : 3
코드풀이 :
* 연필 한다스 : 12개
1. Math는 자바스크립트에서 기본적으로 제공하는 빌트인 객체로 그중 ceil() 메서드는 소숫점 올림이라는 기능을 가지고 있다.
2. 입력받은 값을 한다스의 개수인 12로 나누고 Math.ceil() 메소드를 이용하여 올림 처리한다.
(이때 올림을 해야하는 이유는 자바스크립트에서는 모든 숫자 변수가 float(실수)로 처리되기 때문에 소수로 값이 나온다.)
section1 - #4. 1부터 N까지 합 구하기
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(n){
let answer = 0;
for(let i=1; i<=n;i++){
answer += i;
}
return answer;
}
console.log(solution(6));
</script>
</body>
</html>
Input : 6
Output : 21
코드풀이 :
1. 1부터 입력 받은 값까지 for loop 생성
2. 반복문을 평가하는 i 변수가 1부터 1씩 입력받은 값까지 반복되기 때문에 코드 블럭내에서는 i를 반복문이 실행될때까지 덧셈
section1 - #5. 최솟값 구하기
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer = arr[0];
for(let i = 1; i<arr.length; i++){
if(answer>arr[i]){
answer = arr[i];
}
}
return answer;
}
let arr = [5, 3, 7, 11, 2, 15, 17]
console.log(solution(arr));
</script>
</body>
</html>
Input : [5, 3, 7, 11, 2, 15, 17]
Output : 2
코드풀이 :
1. 입력 받은 array의 값을 비교하기 위해 0번 인덱스의 값을 따로 저장, 따로 저장한 변수에는 비교를 통해 더 작은 값들이 재할당 될 예정.
2. for loop를 1부터 (0인덱스를 따로 저장했으므로) 입력받은 array의 길이만큼 반복
3. for loop의 코드 블럭내에는 최초 따로 저장한 [0]인덱스 부터 마지막 인덱스까지 비교하며 더 작은 값을 업데이트