문제 설명
1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.
- a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
- a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
- a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.
두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
✅ 내 코드
function solution(a, b) {
if(a%2 ===1 && b%2 ===1) {
return a**2 + b**2
}
else if((a%2 ===1 && b%2 ===0) || (a%2 ===0 && b%2 ===1)) {
return 2 *(a+b)
} else {
return Math.abs(a-b)
}
}
🙋♀️ 내 생각
if문과 자바스크립트 연산자만 안다면 쉽게 풀수있는 문제이다.
조건을 모두 충족한다면 &&를, 하나만 충족한다면 ||를 쓴다는 것만 알면 금방 풀 수 있다.
먼저 둘다 짝수인 경우는 %를 이용해서 구해주었다. %는 나머지를 구하는 연산자로 2로 나눈 나머지가 1이라면 홀수, 0이라면 짝수를 뜻한다.
그래서 만약 홀수라면, a의 제곱과 b의 제곱을 더해주게 하였다.
자바스크립트에서 제곱을 구하는 방법은 내가 아는건 3가지가 있는데 a*a와 같이 그냥 곱하거나 아니면 내가 쓴 방법처럼 **를 쓴다.
그리고 Math.pow()를 사용하는 방법도 있다.
그런 다음 둘중 하나만 홀수인 경우의 식을 세워서 계산을 하고
마지막으로 위의 두조건이 모두 아닌경우를 else를 사용해서 (a-b)의 절대값을 구했다.
💻 내가 사용한 메서드
Math.abs(): 주어진 숫자의 절대값을 반환
💻 다른사람 코드중에 배울 것
else if(a%2 === 1 || b%2 === 1) {
result = 2 * (a + b);
}
두번째 else if의 조건으로 들어갈 값을 조금 더 축약해서 적었다.
내가 만든것처럼 &&로 모든 조건을 다 적은것이 아니라 위에 어차피 둘다 홀수인경우를 적고 else if를 사용했기 때문에
굳이 조건을 다 적을 필요 없이 이렇게만 적어도 둘다 홀수인 경우는 제외되기 때문에 이렇게 더 간략하게 적어도 된다.
다음에는 이런 방식으로 짜도록 해봐야겠다.
🙋♀️ 내 생각
쉬운 문제지만 온전히 내 생각을, 컴퓨터의 언어로 자연스럽게 표현할수 있게 되는것이 좋다.
이렇게 기본기를 쌓아두면 나중에는 코딩이 조금 더 자연스럽게 지금 이렇게 한국말로 글을 적는것과 같이 치는 날이 올수도 있지 않을까? 생각한다 ㅎㅎ 알고리즘을 공부하면서 생각을 많이 하게 되는문제, 어려운 문제를 푸는것도 좋지만 이렇게 내가 생각하는 바를 바로 자바스크립트 용어로 마치 외국어로 표현하듯이 글을 적을수있게 되는 과정이 재밌고, 앞으로 더 많은 것들을 자연스럽게 표현할 수 있게 되었으면 좋겠다. 그날까지 계속 꾸준히 공부해야지 ✌️
'JavaScript > 알고리즘' 카테고리의 다른 글
프로그래머스 배열의 원소만큼 추가하기 JS (중첩for문, push() / map() / reduce(), new Array()- 초기값으로 []빈배열사용 ) (0) | 2023.06.05 |
---|---|
프로그래머스 이어붙인수 JS ( filter(), reduce(), String(), Number() ) (0) | 2023.06.04 |
프로그래머스 두 수의 합 JS ( BigInt(), 부동소수점 공부 ) (1) | 2023.06.03 |
프로그래머스 배열만들기1 JS ( Math.floor(), for문, push() ) (0) | 2023.05.31 |
프로그래머스 원소들의 곱과 합 JS ( reduce(), if문 ) (0) | 2023.05.31 |