프로그래머스 Lv.0 각도기 문제풀이
<문제 설명>
각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각, 180도는 평각으로 분류합니다.
각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return
- 예각 : 0 < angle < 90
- 직각 : angle = 90
- 둔각 : 90 < angle < 180
- 평각 : angle = 180
*제한사항
- 0 < angle ≤ 180
- angle은 정수입니다.
☞나의 풀이
function solution(angle) {
let answer = 0;
if (angle < 90) {
return 1;
} else if (angle === 90) {
return 2;
} else if (angle < 180) {
return 3;
} else if (angle === 180) {
return 4;
}
return answer;
}
여러 번의 시도 끝에 답을 찾기는 했으나 정확히 이해가 가지 않아 다른 사람들의 풀이를 찾아봤다.
☞다른 사람 풀이
function solution(angle) {
let answer = 0;
if (angle > 0 && angle < 90) {
return 1;
}
if (angle === 90){ {
return 2;
}
if (angle > 90 && angle < 180) {
return 3;
}
return 4; // 입력 조건에 따르면 위 3개를 만족하지 않으면 180도 일 수밖에 없다
}
→ 논리연산자 &&은 양쪽 값이 모두 true일 때 쓰는 연산자로
angle이 0도 초과, 90도 미만 / 90도 초과 180도 미만에 쓰일 수 있다.
프로그래머스 Lv.0 두 수의 나눗셈 문제풀이
<문제 설명>
정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후
정수 부분을 return
*제한사항
- 0 < num1 ≤ 100
- 0 < num2 ≤ 100
*입출력 예 설명
- num1이 7, num2가 3, 7 /3 = 2.3333....에 1,000을 곱하면 2333.33333.이 되며, 정수 부분은 2333입니다.
☞나의 풀이
function solution(num1, num2) {
var answer = (num1/num2) * 1000
return answer;
}
여기까지는 알겠는데 정수로 표현하는 함수가 뭐가 있는지 찾아보니 parseInt()와 Math.floor() 함수가 대표적으로 나왔다.
☞다른 사람 풀이
function solution(num1, num2) {
var answer = parseInt((num1/num2) * 1000 )
return answer;
}
//parseInt() : 문자열을 정수로 반환하는 함수
// 1. number -> string
// 2. 10진수 추론을 위해 string 앞 2글자가 0x나 0X인지 비교
function solution(num1, num2) {
var answer = Math.floor((num1/num2) * 1000 )
return answer;
} //Math.floor() : 항상 반올림하여 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환하는 함수
→ 경우에 따라 다르기는 하나 이 문제의 경우에서는 parseInt()은 필요없는 계산을 하고 결과가 나오는 거라 비효율적이고,
Math.floor()는 수학적으로 소수점 이하로 버림을 하는 거라 이 경우엔 Math.floor()로 쓰는 게 낫다.
소수점을 버리고 싶으면 Math.floor(), 정수를 남기고 싶으면 parseInt()를 쓰면 된다.
프로그래머스 Lv.0 짝수의 합 문제풀이
<문제 설명>
정수 n이 주어질 때, n 이하의 짝수를 모두 더한 값을 return
*제한사항
: 0 < n ≤ 1000
☞나의 풀이
function solution(n) {
let i = 1; // 1부터 시작하는 변수 설정
let sum = 0 // 더한 걸 누적시킬 변수 설정
while (i <= n) { // n보다 작거나 같을 때 까지
if(i % 2 === 0) {
sum = sum + i;
}
i = i + 1;
}
return sum;
}
→ 짝수를 구하는 거 까지는 알겠는데 이하의 짝수를 모두 더한 값을 구하는 게 어떻게 구해야하지 하는 생각에
한참을 고민했다... 변수를 설정하고 반복문을 써야하는 건 알겠는데 이걸 어떻게 쓰냔 말이지 하면서...
고민을 하다하다 도저히 답이 안 나와서 찾아보고 코드 하나하나 뜯어서 해석해보니 이제야 이해가 갔다.
프로그래머스 Lv.0 배열의 평균값 문제풀이
<문제 설명>
정수 배열 numbers 매개변수 설정. numbers의 원소의 평균값을 return
*제한사항
- 0 ≤ numbers의 원소 ≤ 1000
- 1≤ numbers의 길이 ≤ 100
- 정답의 소수 부분이 .0 또는 .5인 경우만 입력
☞나의 풀이
function solution(numbers) {
let sum = 0
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i]
}
let avg = sum / numbers.length;
return avg;
}
☞다른 사람 풀이
function solution(numbers) {
let sum = 0; // 누적한 값을 담을 변수를 미리 만들어 준다.(꼭)
// sum = sum + numbers[0];
// sum = sum + numbers[1];
// sum = sum + numbers[2]; // 반복문을 통해서 배열 길이만큼 다 더하게 수정
let cnt = 0;
while(cnt < numbers.length){
sum = sum + numbers[cnt];
cnt = cnt + 1;
}
// sum : 배열의 총합이 들어있다.
return sum / numbers.length;
}
→ 다른 사람들의 풀이를 보고 나니 모르는 함수로 간결하게 코드를 짜기도 했던데 그건 나중에 공부하기로 하고
일단 for문과 while문의 차이가 뭔지 궁금해졌다.
둘 다 써도 되는 반복문이지만 분명 무슨 차이가 있을 거 같아서 찾아보았다.
for문 : 반복 횟수가 정해진 경우
for(초기식; 조건식; 변화식;)
// 한 줄에 다 들어가며, 초기식과 조건식이 다 돌고난 후 변화식이 돌아간다,
// 주어진 조건동한 '코드 실행 후 작업' 처리를 반복한다. 초기값이 주어지면 조건을 만족할 때 까지는 실행.
While문 : 무한루프나 특정 조건에 만족할 때까지 반복해야 하는 경우.
초기식
while(조건식)
변화식
// 초기식은 따로 빼두고, 조건식은 while 옆에, 변화식은 밖으로 나와져 있다.
반복된 문장들이 초기식-조건식-변화식을 거쳐 한 줄씩 출력된다.
// 조건이 true인 동안 반복 실행되고, false가 되는 순간 끝.
기초 문법 강의를 여러 번 보고 있는데 이게 뭔가 머리로는 알겠는데 쓰라고 하면 못 쓰겠는 상황이라서
공부 방향성도 안 잡히고 멘털이 흔들리기 시작했었다.
그러는 와중에 알고리즘까지 겪게 되니 아 이거 진짜 어떡하지 큰일 났다 싶었는데
어제부터 사람들이랑 이런저런 얘기 하면서 자바스크립부터 완벽하게 끝내놓자. 프로그래머스 0단계부터 풀면서 공부해 보자 해서 문제 풀기 시작했고 다른 사람들의 풀이를 보면서 처음 보는 함수도 알게 되고 이 함수에 대해
공부하게 되고 그러면서 오늘에서야 공부 방향을 조금은 잡은 거 같다.
속도는 좀 느릴지언정 문제 하나씩 풀어가면서 코드 하나하나 해석하면서 그때그때 나오는 함수들 공부하고
이렇게 하다 보면 언젠간 나도 알아서 쓰고 있는 날이 오지 않을까 생각한다.
'내배캠 4기 React - TIL' 카테고리의 다른 글
221115 TIL (0) | 2022.11.15 |
---|---|
221114 TIL (0) | 2022.11.14 |
221110 TIL - 원장님 특강 (0) | 2022.11.10 |
221109 TIL - Python (0) | 2022.11.09 |
221108 TIL (0) | 2022.11.08 |