일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 웹개발
- 부트캠프
- 캡슐화
- Zustand
- 논리연산자
- 패스트캠퍼스
- 추상화
- 투두앱만들기
- Hooks
- Props
- JavaScript
- CSS
- 프론트엔드
- 자바스크립트
- 노마드코더
- 타입스크립트
- 클래스
- OOP
- typeScript
- REACT
- webdevelopment
- 리액트
- 객체지향프로그래밍
- 자바스트립트
- js
- 불변성
- github
- frontend
- 상속
- Fetch
- Today
- Total
connecting dots
프로그래머스 | 두 수의 차, 두 수의 곱, 몫 구하기 본문
1) 두 수의 차
정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.
# solution.js
function solution(num1, num2) {
const answer = (num1 - num2)
return answer;
}
const a = solution(10, 3);
console.log(a)
원래 변수를 선언할 때 var answer ~ 이렇게 되어 있었는데
기본 강의에서 요즘에는 var를 거의 안 쓴다길래 const로 바꿈 (단순한 함수라 이후 변수를 바꿀 일 없으니 let이나 const 둘 다 상관없다고 생각함) |
const = answer = (num1 - num2)로 선언 --> 두 수의 차를 answer 변수에 저장
return 하여 나온 값을 a에 저장, console.log로 출력 |
- var를 최근에 잘 사용하지 않는 이유
- var의 문제점
* 함수 스코프(Function Scope)
var는 함수 스코프를 가짐 = 블록 스코프를 지원하지 않음
--> if 문이나 for문 내부에서 선언된 var 변수는 해당 블록 외부에서도 접근 가능
function example() {
if (true) {
var x = 10;
}
console.log(x); // 10 (블록 외부에서도 접근 가능)
}
example();
* 변수 호이스팅(Variable hoisting)
var는 변수를 사용하기 전에 정의되지 않은 값(undefined)에 접근할 수 있음
console.log(x); // undefined (선언은 호이스팅되지만, 초기화는 안됨)
var x = 10;
* 중복 선언 허용
var로 동일한 변수를 여러 번 선언해도 에러가 발생하지 않음 --> 코드 가독성과 유지보수성 감소
var x = 10;
var x = 20; // 에러 없음
console.log(x); // 20
2. const, let의 장점
* 블록 스코프
변수나 상수가 선언된 블록 내에서만 유효하고, 블록 외부에서는 접근할 수 없음
function example() {
if (true) {
let y = 10;
}
console.log(y); // ReferenceError: y is not defined
}
example();
* 변수 호이스팅 방지
변수가 선언되기 전에 접근하면 에러 발생
console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 10;
* 중복 선언 금지
동일한 변수를 중복 선언하면 에러가 발생함
let y = 10;
let y = 20; // SyntaxError: Identifier 'y' has already been declared
* 상수 선언
const는 값을 한번 할당하면 변경할 수 없음
const z = 10;
z = 20; // TypeError: Assignment to constant variable.
2) 두 수의 곱
정수 num1, num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.
# solution.js
function solution(num1, num2) {
let answer = (num1 * num2);
return answer;
}
console.log(solution(2,10))
이번엔 const 말고 let으로 선언함 (이 문제에서는 둘 다 상관 없다고 생각해서 ,,)
|
let answer = (num1 * num2)로 선언 --> 두 수의 곱을 answer 변수에 저장
이 문제에서는 함수의 결과가 반복적으로 사용되지 않으니 그냥 console.log에 solution 함수와 인자 기입 후 출력되도록 적었음 |
## 그룹 스터디 피드백
특이한 상황(변수 값 바꿔야 하는 등)이 아니라면 const로 쓰는 것이
더 안정적인 코드이니 굳이 let으로 쓸 필요는 없음 !!
- let과 const
|
let
|
const
|
공통점
|
블록 스코프(Block Scope)를 가짐
--> 변수가 선언된 블록 { } 내에서만 유효함을 의미 |
|
차이점
|
1) 변수의 값 재할당 가능
2) 선언 시 초기화 하지 않고 나중에 값 할당 가능 3) let으로 선언한 객체와 배열은 자유롭게 재할당, 내부수정 가능 |
1) 변수의 값 재할당 불가능
2) 선언과 동시에 값을 할당해야 함 3) const로 선언한 객체나 배열 자체를 재할당할 수는 없지만, 그 안의 내용을 수정하는 것은 가능 |
2) 초기화 필요 여부
let x;
x = 10; // 나중에 값 할당 가능
console.log(x); // 10
const y; // 오류: Missing initializer in const declaration.
y = 10; // 초기화 불가
3) 객체와 배열
let obj = { key: "value" };
obj = { newKey: "newValue" }; // 객체 재할당 가능
console.log(obj); // { newKey: "newValue" }
let arr = [1, 2, 3];
arr = [5, 6, 7]; // 배열 재할당 가능
console.log(arr); // [5, 6, 7]
const obj = { key: "value" };
obj.key = "new value"; // 객체 내부 속성 변경 가능
console.log(obj.key); // "new value"
const arr = [1, 2, 3];
arr.push(4); // 배열 내부 요소 추가 가능
console.log(arr); // [1, 2, 3, 4]
obj = { newKey: "newValue" }; // 오류: Assignment to constant variable.
arr = [5, 6, 7]; // 오류: Assignment to constant variable.
## 그룹스터디 추가 내용
객체랑 배열은 그 자체를 변수에 담고 있는 것임
그래서 완전 새로운 객체를 다시 할당하지 않는 이상 수정이 가능하다 !
--> 객체랑 배열이 이런 특성을 가지고 있어서 const 써도 수정이 가능하다
3) 몫 구하기
정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.
# solution.js
function solution(num1, num2) {
let answer = Math.floor(num1 / num2);
return answer;
}
solution(10,2)
처음에는 let answer = (num1 / num2); 로 하였으나
코드 테스트에서 오류가 발생함 --> 정수로 결과가 출력되어야 하는데 solution(7,2)에서 3.5 출력 |
정수를 만들어주는 코드 중 Math.floor사용 --> 오류없이 출력
|
왜 console.log를 쓰지 않아도 정답일까 생각해보다가 이상해서 gpt 검색하니
IDE나 특정 실행 환경에서 자동으로 값을 출력해주는 것일 수 있고, 일반적인 자바스크립트 환경에서는 console.log를 사용해야 출력된다는 것을 알게됨 !! 주의할 것 |
- Math.floor
소수점 이하를 버리고 내림하는 기능
- Math.trunc
소수점을 버리고 정수 부분만 반환
function solution(num1, num2) {
let answer = Math.trunc(num1 / num2);
return answer;
}
console.log(solution(10, 2)); // 출력: 5
console.log(solution(10, 3)); // 출력: 3
console.log(solution(-10, 3)); // 출력: -3
- parseInt
문자열을 정수로 변환, 숫자를 문자열로 변환 후 parseInt 사용하여 소수점 버릴 수 있음
function solution(num1, num2) {
let answer = parseInt(num1 / num2);
return answer;
}
console.log(solution(10, 2)); // 출력: 5
console.log(solution(10, 3)); // 출력: 3
console.log(solution(-10, 3)); // 출력: -3
## Math.floor와 Math.trunc 차이점
차이점 요약
• 양수에 대한 처리: 양수일 때 Math.floor와 Math.trunc는 동일한 결과를 반환합니다.
Math.floor(4.9); // 4
Math.trunc(4.9); // 4
• 음수에 대한 처리: 음수일 때 Math.floor는 내림을 하여 더 작은 정수를 반환하는 반면, Math.trunc는 단순히 소수점을 잘라내어 더 큰(즉, 0에 가까운) 정수를 반환합니다.
Math.floor(-4.9); // -5
Math.trunc(-4.9); // -4
'Coding Test' 카테고리의 다른 글
프로그래머스 | 짝수의 합, 배열의 평균값, 짝수와 홀수, 평균 구하기, 자릿수 더하기 (0) | 2024.06.16 |
---|---|
프로그래머스 | 나이 출력, 숫자 비교하기, 두 수의 합, 두 수의 나눗셈, 각도기 (1) | 2024.06.09 |